home *** CD-ROM | disk | FTP | other *** search
/ Tech Arsenal 1 / Tech Arsenal (Arsenal Computer).ISO / tek-04 / inter36b.zip / INTERRUP.F < prev    next >
Text File  |  1993-08-01  |  305KB  |  8,005 lines

  1. Interrupt List, part 6 of 10
  2. This compilation is Copyright (c) 1989,1990,1991,1992,1993 Ralf Brown
  3. --------D-22---------------------------------
  4. INT 22 - DOS 1+ - PROGRAM TERMINATION ADDRESS
  5. Desc:    this vector specifies the address of the routine which is to be given
  6.       control after a program is terminated; it should never be called
  7.       directly, since it does not point at an interrupt handler
  8. Notes:    this vector is restored from the DWORD at offset 0Ah in the PSP during
  9.       termination, and then a FAR JMP is performed to the address in INT 22
  10.     normally points at the instruction immediately following INT 21/AH=4Bh
  11.       call which loaded the current program
  12. SeeAlso: INT 20,INT 21/AH=00h,INT 21/AH=31h,INT 21/AH=4Ch
  13. --------G-22---------------------------------
  14. INT 22 - COMTROL HOSTESS i/ISA DEBUGGER - CHANGE FIRMWARE DEBUGGING PORT
  15.     AL = new firmware debugging port
  16. Return: ???
  17. SeeAlso: INT 21"COMTROL",INT 23"COMTROL"
  18. --------D-23---------------------------------
  19. INT 23 - DOS 1+ - CONTROL-C/CONTROL-BREAK HANDLER
  20. ---DOS 1.x---
  21. Return: AH = 00h abort program
  22.     if all registers preserved, restart DOS call
  23. ---DOS 2+---
  24.     CF clear
  25. Return: all registers preserved
  26.     return via RETF or RETF 2 with CF set
  27.         DOS will abort program with errorlevel 0
  28.     else (RETF/RETF 2 with CF clear or IRET)
  29.         interrupted DOS call is restarted
  30. Notes:    this interrupt is invoked whenever DOS detects a ^C or ^Break; it
  31.       should never be called directly
  32.     MS-DOS 1.25 also invokes INT 23 on a divide overflow (INT 00)
  33.     DOS remembers the stack pointer before calling INT 23, and if it is
  34.       not the same on return, pops and discards the top word; this is what
  35.       permits a return with RETF as well as IRET or RETF 2
  36.     any DOS call may safely be made within the INT 23 handler, although
  37.       the handler must to check for a recursive invocation if it does
  38.       call DOS
  39. SeeAlso: INT 1B
  40. --------G-23---------------------------------
  41. INT 23 - COMTROL HOSTESS i/ISA DEBUGGER - GET CONFIGURATION INFORMATION
  42.     AL = query type
  43.         00h get old config map
  44.         Return: AX = old config map
  45.         01h get dual-ported RAM map
  46.         Return: BX:AX = dual-ported RAM map
  47.         02h get SCC port map
  48.         Return: BX:AX = SCC port map
  49. SeeAlso: INT 22"COMTROL",INT 26"COMTROL"
  50. --------D-24---------------------------------
  51. INT 24 - DOS 1+ - CRITICAL ERROR HANDLER
  52. Note:    invoked when a critical (usually hardware) error is encountered; should
  53.       never be called directly
  54. SeeAlso: INT 21/AH=95h
  55.  
  56. Critical error handler is invoked with:
  57.     AH = type and processing flags
  58.         bit 7 clear = disk I/O error
  59.           set    = -- if block device, bad FAT image in memory
  60.               -- if char device, error code in DI
  61.         bit 6  unused
  62.         bit 5 = 1 if Ignore allowed, 0 if not (DOS 3+)
  63.         bit 4 = 1 if Retry allowed, 0 if not (DOS 3+)
  64.         bit 3 = 1 if Fail allowed, 0 if not (DOS 3+)
  65.         bit 2 \ disk area of error    00 = DOS area  01 = FAT
  66.         bit 1 /            10 = root dir  11 = data area
  67.         bit 0 = 1 if write, 0 if read
  68.     AL = drive number if AH bit 7 clear
  69.     BP:SI -> device driver header (BP:[SI+4] bit 15 set if char device)
  70.     DI low byte contains error code if AH bit 7 set
  71.        00h write-protection violation attempted
  72.        01h unknown unit for driver
  73.        02h drive not ready
  74.        03h unknown command given to driver
  75.        04h data error (bad CRC)
  76.        05h bad device driver request structure length
  77.        06h seek error
  78.        07h unknown media type
  79.        08h sector not found
  80.        09h printer out of paper
  81.        0Ah write fault
  82.        0Bh read fault
  83.        0Ch general failure
  84.        0Dh (DOS 3+) sharing violation
  85.        0Eh (DOS 3+) lock violation
  86.        0Fh invalid disk change
  87.        10h (DOS 3+) FCB unavailable
  88.        11h (DOS 3+) sharing buffer overflow
  89.        12h (DOS 4+) code page mismatch
  90.        13h (DOS 4+) out of input
  91.        14h (DOS 4+) insufficient disk space
  92.     STACK:    DWORD    return address for INT 24 call
  93.         WORD    flags pushed by INT 24
  94.         WORD    original AX on entry to INT 21
  95.         WORD    BX
  96.         WORD    CX
  97.         WORD    DX
  98.         WORD    SI
  99.         WORD    DI
  100.         WORD    BP
  101.         WORD    DS
  102.         WORD    ES
  103.         DWORD    return address for INT 21 call
  104.         WORD    flags pushed by INT 21
  105. Handler must return:
  106.     AL = action code
  107.         00h ignore error and continue processing request
  108.         01h retry operation
  109.         02h terminate program through the equivalent of INT 21/AH=4Ch
  110.             (INT 20h for DOS 1.x)
  111.         03h fail system call in progress
  112.     SS,SP,DS,ES,BX,CX,DX preserved
  113. Notes:    the only DOS calls the handler may make are INT 21/AH=01h-0Ch,30h,59h
  114.     if the handler returns to the application by popping the stack, DOS
  115.       will be in an unstable state until the first call with AH > 0Ch
  116.     for DOS 3.1+, IGNORE (AL=00h) is turned into FAIL (AL=03h) on network
  117.       critical errors
  118.     if IGNORE specified but not allowed, it is turned into FAIL
  119.     if RETRY specified but not allowed, it is turned into FAIL
  120.     if FAIL specified but not allowed, it is turned into ABORT
  121.     (DOS 3+) if a critical error occurs inside the critical error handler,
  122.       the DOS call is automatically failed
  123. --------D-25---------------------------------
  124. INT 25 - DOS 1+ - ABSOLUTE DISK READ (except partitions > 32M)
  125.     AL = drive number (00h = A:, 01h = B:, etc)
  126.     CX = number of sectors to read
  127.     DX = starting logical sector number (0000h - highest sector on drive)
  128.     DS:BX -> buffer for data
  129. Return: CF clear if successful
  130.     CF set on error
  131.         AH = status
  132.          80h device failed to respond (timeout)
  133.          40h seek operation failed
  134.          20h controller failed
  135.          10h data error (bad CRC)
  136.          08h DMA failure
  137.          04h requested sector not found
  138.          03h write-protected disk (INT 26 only)
  139.          02h bad address mark
  140.          01h bad command
  141.         AL = error code (same as passed to INT 24 in DI)
  142.         AX = 0207h if more than 64K sectors on drive
  143.     may destroy all other registers except segment registers
  144. Notes:    original flags are left on stack, and must be popped by caller
  145.     this call bypasses the DOS filesystem
  146. BUGS:    DOS 3.1 through 3.3 set the word at ES:[BP+1Eh] to FFFFh if AL is an
  147.       invalid drive number
  148.     DR-DOS 3.41 will return with a jump instead of RETF, leaving the
  149.       wrong number of bytes on the stack; use the huge-partition version
  150.       (INT 25/CX=FFFFh) for all partition sizes under DR-DOS 3.41
  151. SeeAlso: INT 13/AH=02h,INT 2F/CX=FFFFh,INT 26
  152. --------D-25----CXFFFF-----------------------
  153. INT 25 - DOS 3.31+ - ABSOLUTE DISK READ (>32M hard-disk partition)
  154.     CX = FFFFh
  155.     AL = drive number (0=A, 1=B, etc)
  156.     DS:BX -> disk read packet (see below)
  157. Return: same as above
  158. Notes:    partition is potentially >32M (and requires this form of the call) if
  159.       bit 1 of device attribute word in device driver is set
  160.     original flags are left on stack, and must be removed by caller
  161.     this call bypasses the DOS filesystem
  162. SeeAlso: INT 13/AH=02h,INT 25,INT 26/CX=FFFFh
  163.  
  164. Format of disk read packet:
  165. Offset    Size    Description
  166.  00h    DWORD    sector number
  167.  04h    WORD    number of sectors to read
  168.  06h    DWORD    transfer address
  169. --------d-25CDCD-----------------------------
  170. INT 25 - Stacker - GET DEVICE DRIVER ADDRESS
  171.     AX = CDCDh
  172.     DS:BX -> buffer for address (see below)
  173.     CX = 0001h
  174.     DX = 0000h
  175. Return: AX = CDCDh if Stacker installed
  176.         DS:BX buffer filled
  177.  
  178. Format of driver address buffer:
  179. Offset    Size    Description
  180.  00h    WORD    signature CDCDh
  181.  02h    WORD    ??? 0001h
  182.  04h    DWORD    pointer to start of Stacker device driver
  183.  
  184. Format of device driver:
  185. Offset    Size    Description
  186.  00h    WORD    signature A55Ah
  187.  02h    WORD    Stacker version * 64h
  188.  04h    WORD    offset of volume-specific information offset table
  189.         (list of WORDs, one per drive, containing offsets to various
  190.         information)
  191.  06h 56 BYTEs    n/a
  192.  3Eh    BYTE    volume number, set after INT 21/AX=4404h
  193.         (use to index into volume-specific info offset table)
  194.  3Fh 19 BYTEs    n/a
  195.  52h  4 BYTEs    ASCII string "SWAP"
  196.  56h 26 BYTEs    drive mapping table (one byte for each drive A: through Z:)
  197.  
  198. Format of Stacker boot record:
  199. Offset    Size    Description
  200. 1F0h  8 BYTEs    Stacker signature (first byte is CDh)
  201. 1F8h    DWORD    pointer to start of Stacker device driver
  202. 1FCh    WORD    Stacker volume number
  203. 1FEh    WORD    ???
  204. --------c-25--FFSI4358-----------------------
  205. INT 25 - PC-CACHE.SYS - INSTALLATION CHECK
  206.     AL = FFh
  207.     SI = 4358h
  208. Return: SI = 6378h if installed
  209.         CX = segment of device driver PC-CACHE.SYS
  210.         DX = version (major in DH, minor in DL)
  211. Program: PC-CACHE.SYS is a small device driver used by PC-Cache v5.x to obtain
  212.       access to certain disk drivers for devices such as Bernoulli drives
  213. SeeAlso: INT 13/AH=A0h
  214. --------D-26---------------------------------
  215. INT 26 - DOS 1+ - ABSOLUTE DISK WRITE (except partitions > 32M)
  216.     AL = drive number (00h = A:, 01h = B:, etc)
  217.     CX = number of sectors to write
  218.     DX = starting logical sector number (0000h - highest sector on drive)
  219.     DS:BX -> data to write
  220. Return: CF clear if successful
  221.     CF set on error
  222.         AH = status
  223.          80h device failed to respond (timeout)
  224.          40h seek operation failed
  225.          20h controller failed
  226.          10h data error (bad CRC)
  227.          08h DMA failure
  228.          04h requested sector not found
  229.          03h write-protected disk (INT 26 only)
  230.          02h bad address mark
  231.          01h bad command
  232.         AL = error code (same as passed to INT 24 in DI)
  233.         AX = 0207h if more than 64K sectors on drive
  234.     may destroy all other registers except segment registers
  235. Notes:    original flags are left on stack, and must be popped by caller
  236.     this call bypasses the DOS filesystem, though DOS 5+ invalidates any
  237.       disk buffers referencing sectors which are written with this call
  238. BUGS:    DOS 3.1 through 3.3 set the word at ES:[BP+1Eh] to FFFFh if AL is an
  239.       invalid drive number
  240.     DR-DOS 3.41 will return with a jump instead of RETF, leaving the
  241.       wrong number of bytes on the stack; use the huge-partition version
  242.       (INT 26/CX=FFFFh) for all partition sizes under DR-DOS 3.41
  243. SeeAlso: INT 13/AH=03h,INT 25,INT 26/CX=FFFFh
  244. --------D-26----CXFFFF-----------------------
  245. INT 26 - DOS 3.31+ - ABSOLUTE DISK WRITE (>32M hard-disk partition)
  246.     CX = FFFFh
  247.     AL = drive number (0=A, 1=B, etc)
  248.     DS:BX -> disk write packet (see below)
  249. Return: same as above
  250. Notes:    partition is potentially >32M (and requires this form of the call) if
  251.       bit 1 of device attribute word in device driver is set
  252.     original flags are left on stack, and must be removed by caller
  253.     this call bypasses the DOS filesystem, though DOS 5+ invalidates any
  254.       disk buffers referencing sectors which are written with this call
  255. SeeAlso: INT 13/AH=03h,INT 25/CX=FFFFh,INT 26
  256.  
  257. Format of disk write packet:
  258. Offset    Size    Description
  259.  00h    DWORD    sector number
  260.  04h    WORD    number of sectors to read
  261.  06h    DWORD    transfer address
  262. --------G-26---------------------------------
  263. INT 26 - COMTROL HOSTESS i/ISA DEBUGGER - ENTER/EXIT EXTENDED ADDRESSING MODE
  264.     ???
  265. Return: ???
  266. SeeAlso: INT 23"COMTROL",INT 27"COMTROL"
  267. --------D-27---------------------------------
  268. INT 27 - DOS 1+ - TERMINATE AND STAY RESIDENT
  269.     DX = number of bytes to keep resident (max FFF0h)
  270.     CS = segment of PSP
  271. Return: never
  272. Notes:    this is an obsolete call
  273.     INT 22, INT 23, and INT 24 are restored from the PSP
  274.     does not close any open files
  275.     the minimum number of bytes which will remain resident is 110h for
  276.       DOS 2.x and 60h for DOS 3+; there is no minimum for DOS 1.x, which
  277.       implements this service in COMMAND.COM rather than the DOS kernel
  278. SeeAlso: INT 21/AH=31h
  279. --------G-27---------------------------------
  280. INT 27 - COMTROL HOSTESS i/ISA DEBUGGER - INVOKE REMOTE TURBO DEBUGGER KERNEL
  281.     ???
  282. Return: ???
  283. Desc:    invoke a copy of the remote Turbo Debugger kernel on the Hostess i
  284.       controller
  285. SeeAlso: INT 20"COMTROL",INT 26"COMTROL"
  286. --------D-28---------------------------------
  287. INT 28 C - DOS 2+ - DOS IDLE INTERRUPT
  288.     SS:SP = top of MS-DOS stack for I/O functions
  289. Return: all registers preserved
  290. Desc:    This interrupt is invoked each time one of the DOS character input
  291.       functions loops while waiting for input.  Since a DOS call is in
  292.       progress even though DOS is actually idle during such input waits,
  293.       hooking this function is necessary to allow a TSR to perform DOS
  294.       calls while the foreground program is waiting for user input.     The
  295.       INT 28h handler may invoke any INT 21h function except functions
  296.       00h through 0Ch.
  297. Notes:    under DOS 2.x, the critical error flag (the byte immediately after the
  298.       InDOS flag) must be set in order to call DOS functions 50h/51h from
  299.       the INT 28h handler without destroying the DOS stacks.
  300.     calls to INT 21/AH=3Fh,40h from within an INT 28 handler may not use a
  301.       handle which refers to CON
  302.     at the time of the call, the InDOS flag (see INT 21/AH=34h) is normally
  303.       set to 01h; if larger, DOS is truly busy and should not be reentered
  304.     the default handler is an IRET instruction
  305.     supported in OS/2 compatibility box
  306.     the _MS-DOS_Programmer's_Reference_ for DOS 5.0 incorrectly documents
  307.       this interrupt as superseded
  308. SeeAlso: INT 21/AH=34h,INT 2A/AH=84h,INT 2F/AX=1680h
  309. --------D-29---------------------------------
  310. INT 29 C - DOS 2+ - FAST CONSOLE OUTPUT
  311.     AL = character to display
  312. Return: nothing
  313. Notes:    automatically called when writing to a device with bit 4 of its device
  314.       driver header set (see also INT 21/AH=52h)
  315.     COMMAND.COM v3.2 and v3.3 compare the INT 29 vector against the INT 20
  316.       vector and assume that ANSI.SYS is installed if the segment is larger
  317.     the default handler under DOS 2.x and 3.x simply calls INT 10/AH=0Eh
  318.     the default handler under DESQview 2.2 understands the <Esc>[2J
  319.       screen-clearing sequence, calls INT 10/AH=0Eh for all others
  320. SeeAlso: INT 21/AH=52h,INT 2F/AX=0802h,INT 79
  321. --------N-2A00-------------------------------
  322. INT 2A - NETWORK (Microsoft, LANtastic) - INSTALLATION CHECK
  323.     AH = 00h
  324. Return: AH <> 00h if installed
  325.     CF set if NetWare v2.15 NetBIOS emulator installed
  326. Note:    also supported by Lantastic, NetWare, 10NET, etc.
  327. SeeAlso: INT 5C
  328. --------N-2A0000-----------------------------
  329. INT 2A - AT&T Starlan Extended NetBIOS (var length names) - INSTALLATION CHECK
  330.     AX = 0000h
  331. Return: AH = DDh
  332. SeeAlso: INT 5B
  333. --------N-2A01-------------------------------
  334. INT 2A - NETWORK (Microsoft,LANtastic) - EXECUTE NETBIOS REQUEST,NO ERROR RETRY
  335.     AH = 01h
  336.     ES:BX -> NCB (see INT 5C)
  337. Return: AL = NetBIOS error code
  338.     AH = 00h if no error
  339.        = 01h on error
  340. SeeAlso: AH=04h,AX=0500h,INT 5B,INT 5C"NetBIOS"
  341. --------N-2A02-------------------------------
  342. INT 2A - NETWORK (Microsoft) - SET NET PRINTER MODE
  343.     AH = 02h
  344.     ???
  345. Return: ???
  346. --------N-2A0300-----------------------------
  347. INT 2A - NETWORK (Microsoft,LANtastic) - CHECK DIRECT I/O
  348.     AX = 0300h
  349.     DS:SI -> ASCIZ device name (may be full path or only drive specifier--
  350.         must include the colon)
  351. Return: CF clear if direct physical addressing (INT 13,INT 25) permissible
  352.     CF set if access via files only
  353. Notes:    do not use direct disk accesses if this function returns CF set or the
  354.       device is redirected (INT 21/AX=5F02h)
  355.     may take some time to execute
  356.     called by DOS kernel on INT 25 and INT 26
  357.     also supported by Lantastic, NetWare, 10NET, etc.
  358. SeeAlso: INT 13,INT 25,INT 26,INT 21/AX=5F02h
  359. --------N-2A04-------------------------------
  360. INT 2A - NETWORK (Microsoft,LANtastic) - EXECUTE NetBIOS REQUEST
  361.     AH = 04h
  362.     AL = error retry
  363.         00h automatically retry request on errors 09h, 12h, and 21h
  364.         01h no retry
  365.         02h ???
  366.     ES:BX -> Network Control Block (see INT 5C"NetBIOS")
  367. Return: AX = 0000h if successful
  368.     AH = 01h on error
  369.         AL = error code
  370. Notes:    invokes either INT 5B or INT 5C as appropriate
  371.     also supported by Lantastic, NetWare, 10NET, etc.
  372.     NetWare 2.15 NetBIOS emulator returns CF clear if succesful, set on err
  373. SeeAlso: AH=01h,AX=0500h,INT 5B,INT 5C"NetBIOS"
  374. --------N-2A0500-----------------------------
  375. INT 2A - NETWORK (Microsoft,LANtastic) - GET NETWORK RESOURCE AVAILABILITY
  376.     AX = 0500h
  377. Return: AX reserved
  378.     BX = number of network names available
  379.     CX = number of network control blocks available
  380.     DX = number of network sessions available
  381. Note:    also supported by Lantastic, NetWare, 10NET, etc.
  382. SeeAlso: AH=01h,AH=04h,INT 5C"NetBIOS"
  383. --------N-2A06-------------------------------
  384. INT 2A - NETBIOS, LANtastic - NETWORK PRINT-STREAM CONTROL
  385.     AH = 06h
  386.     AL = 01h set concatenation mode (all printer output put in one job)
  387.          02h set truncation mode (default)
  388.          printer open/close starts new print job
  389.          03h flush printer output and start new print job
  390. Return: CF set on error
  391.         AX = error code
  392.     CF clear if successful
  393. Notes:    subfunction 03h is equivalent to Ctrl/Alt/keypad-*
  394.     also supported by Lantastic, NetWare, 10NET, etc.
  395.     LANtastic v4.x no longer supports this call
  396. SeeAlso: INT 21/AX=5D08h,INT 21/AX=5D09h,INT 2F/AX=1125h
  397. --------N-2A07-------------------------------
  398. INT 2A U - PC Network v1.00 - RECEIVER.COM - ???
  399.     AH = 07h
  400.     ???
  401. Return: ???
  402. Program: PC Network is an early networking package which was renamed the
  403.       IBM PC Local Area Network Program (PC LAN Program) as of v1.10
  404. SeeAlso: AH=86h
  405. --------N-2A2001-----------------------------
  406. INT 2A - MS Networks or NETBIOS - ???
  407.     AX = 2001h
  408.     ???
  409. Return: ???
  410. Note:    intercepted by DESQview 2.x
  411. --------N-2A2002-----------------------------
  412. INT 2A - NETWORK - ???
  413.     AX = 2002h
  414.     ???
  415. Return: ???
  416. Note:    called by MS-DOS 3.30-6.00 APPEND
  417. --------N-2A2003-----------------------------
  418. INT 2A - NETWORK - ???
  419.     AX = 2003h
  420.     ???
  421. Return: ???
  422. Note:    called by MS-DOS 3.30-6.00 APPEND
  423. --------N-2A7802-----------------------------
  424. INT 2A - NETWORK - PC LAN PROG v1.31+ - GET LOGGED ON USER NAME
  425.     AX = 7802h
  426.     ES:DI -> 8-byte buffer to be filled
  427. Return: AL = 00h if no user logged on to Extended Services
  428.     AL <> 00h if user logged on to Extended Services
  429.         buffer at ES:DI filled with name, padded to 8 chars with blanks.
  430. --------D-2A80-------------------------------
  431. INT 2A CU - NETWORK - BEGIN DOS CRITICAL SECTION
  432.     AH = 80h
  433.     AL = critical section number (00h-0Fh)
  434.         01h DOS kernel, SHARE.EXE, DOSMGR
  435.         apparently for maintaining the integrity of DOS/SHARE/NET
  436.           data structures
  437.         02h DOS kernel, DOSMGR
  438.         ensures that no multitasking occurs while DOS is calling an
  439.           installable device driver
  440.         05h network redirector
  441.         06h DOS 4.x only IFSFUNC
  442.         08h ASSIGN.COM
  443.         0Ah MSCDEX
  444.         0Fh IBM PC LAN server (while intercepting INT 10/AH=06h,07h,0Eh)
  445. Notes:    normally hooked to avoid interrupting a critical section, rather than
  446.       called
  447.     the handler should ensure that none of the critical sections are
  448.       reentered, usually by suspending a task which attempts to reenter
  449.       an active critical section
  450.     the DOS kernel does not invoke critical sections 01h and 02h unless it
  451.       is patched.  DOS 3.1+ contains a zero-terminated list of words
  452.       beginning at offset -11 from the Swappable Data Area
  453.       (see INT 21/AX=5D06h); each word contains the offset within the
  454.       DOS data segment of a byte which must be changed from C3h (RET)
  455.       to 50h (POP AX) under DOS 3.x or from 00h to a nonzero value under
  456.       DOS 4+ to enable use of critical sections.  For DOS 4+, all words in
  457.       this list point at the byte at offset 0D0Ch.
  458. SeeAlso: AH=81h,AH=82h,AX=8700h,INT 21/AX=5D06h,INT 21/AX=5D0Bh
  459. --------D-2A81-------------------------------
  460. INT 2A CU - NETWORK - END DOS CRITICAL SECTION
  461.     AH = 81h
  462.     AL = critical section number (00h-0Fh) (see AH=80h)
  463. Notes:    normally hooked rather than called
  464.     the handler should reawaken any tasks which were suspended due to an
  465.       attempt to enter the specified critical section
  466. SeeAlso: AH=80h,AH=82h,AX=8700h
  467. --------D-2A82-------------------------------
  468. INT 2A CU - NETWORK - END DOS CRITICAL SECTIONS 0 THROUGH 7
  469.     AH = 82h
  470. Notes:    called by the INT 21h function dispatcher for function 0 and functions
  471.       greater than 0Ch except 59h, and on process termination
  472.     the handler should reawaken any tasks which were suspended due to an
  473.       attempt to enter one of the critical sections 0 through 7
  474. SeeAlso: AH=81h
  475. --------N-2A84-------------------------------
  476. INT 2A CU - NETWORK - KEYBOARD BUSY LOOP
  477.     AH = 84h
  478. Note:    similar to DOS's INT 28h, called from inside the DOS keyboard input
  479.       loop (i.e. INT 21/AH=07h or INT 21/AH=08h) to allow the network
  480.       software to process requests
  481. SeeAlso: INT 28
  482. --------N-2A86-------------------------------
  483. INT 2A U - PC Network v1.00 - RECEIVER.COM - ???
  484.     AH = 86h
  485.     ???
  486. Return: ???
  487. SeeAlso: AH=07h,AH=C4h
  488. --------P-2A8700-----------------------------
  489. INT 2A CU - PRINT - BEGIN BACKGROUND PRINTING
  490.     AX = 8700h
  491.     CF clear
  492. Return: CF clear if OK to print in background now
  493.     CF set if background printing not allowed at this time
  494. Desc:    used to inform interested programs that PRINT is about to start its
  495.       background processing, and allow those programs to postpone the
  496.       processing if necessary
  497. Notes:    when PRINT gains control and want to begin printing, it calls this
  498.       function.  If CF is clear on return, PRINT begins its background
  499.       processing, and calls AX=8701h when it is done.  If CF is set on
  500.       return, PRINT will relinquish control immediately, and will not
  501.       call AX=8701h
  502.     PCVENUS (an early network shell by IBM and CMU) hooks this call to
  503.       prevent background printing while its own code is active
  504. SeeAlso: AH=80h,AH=81h,AX=8701h
  505. --------P-2A8701-----------------------------
  506. INT 2A CU - PRINT - END BACKGROUND PRINTING
  507.     AX = 8701h
  508. Desc:    used to inform interested programs that PRINT has completed its
  509.       background processing
  510. Note:    called by PRINT after it has performed some background printing; not
  511.       called if AX=8700h returned with CF set.
  512. SeeAlso: AX=8700h
  513. --------N-2A89-------------------------------
  514. INT 2A U - PC Network v1.00 - RECEIVER.COM - ???
  515.     AH = 89h
  516.     AL = ???  (ASSIGN uses 08h)
  517.     ???
  518. Return: ???
  519. --------I-2A90-------------------------------
  520. INT 2A U - IBM PC 3270 EMULATION PROGRAM - ???
  521.     AH = 90h
  522.     ???
  523. Return: ???
  524. Note:    the LANtastic redirector and SERVER.EXE use this function with AL=01h,
  525.       03h-07h,0Ch-11h
  526. --------N-2AC2-------------------------------
  527. INT 2A U - Network - ???
  528.     AH = C2h
  529.     AL = subfunction
  530.         07h ???
  531.         08h ???
  532.     BX = 0001h
  533.     ???
  534. Return: ???
  535. Note:    called by DOS 3.30-6.00 APPEND
  536. --------N-2AC4-------------------------------
  537. INT 2A U - PC Network v1.00 - RECEIVER.COM - ???
  538.     AH = C4h
  539.     AL = subfunction
  540.         07h ???
  541.         08h ???
  542.     BX = ???
  543.     ???
  544. Return: ???
  545. SeeAlso: AH=86h
  546. --------N-2AD800-----------------------------
  547. INT 2A U - Novell NetWare Lite - SERVER - SET ???
  548.     AX = D800h
  549. Return: nothing
  550. Desc:    sets ??? flag, and sets ??? to initial value
  551. Note:    called by CLIENT
  552. SeeAlso: AX=D801h,AX=D850h
  553. --------N-2AD801-----------------------------
  554. INT 2A U - Novell NetWare Lite - SERVER - RESET ???
  555.     AX = D801h
  556. Return: nothing
  557. Desc:    clears the ??? flag set by AX=D800h
  558. Note:    called by CLIENT
  559. SeeAlso: AX=D800h,AX=D850h
  560. --------N-2AD850-----------------------------
  561. INT 2A U - Novell NetWare Lite - CLIENT - INCREMENT ???
  562.     AX = D850h
  563. Return: nothing
  564. Desc:    increments an internal byte-sized counter
  565. Note:    intercepted by DV/X 1.10 PEERSERV.DVR
  566. SeeAlso: AX=D851h
  567. --------N-2AD851-----------------------------
  568. INT 2A U - Novell NetWare Lite - CLIENT - RESET ???
  569.     AX = D851h
  570. Return: nothing
  571. Desc:    resets an internal byte-sized counter to zero
  572. Note:    intercepted by DV/X 1.10 PEERSERV.DVR
  573. SeeAlso: AX=D850h
  574. --------N-2AE0-------------------------------
  575. INT 2A U - PC Network 1.00 - ???
  576.     AH = E0h
  577.     AL = subfunction??? (01h,02h, maybe others)
  578.     ???
  579. Return: ???
  580. Note:    called by PCNet 1.00 NET.COM, a shell program from which others are run
  581. --------N-2AFF90-----------------------------
  582. INT 2A - PC/TCP PREDIR.EXE - ???
  583.     AX = FF90h
  584. Return: AX = ???
  585. Note:    PREDIR.EXE is the network printer redirector included as part of the
  586.       PC/TCP system by FTP Software, Inc.
  587. --------N-2AFF91-----------------------------
  588. INT 2A - PC/TCP PREDIR.EXE - ???
  589.     AX = FF91h
  590.     BX = ???
  591. Return: AX = status???
  592. --------N-2AFF92-----------------------------
  593. INT 2A - PC/TCP PREDIR.EXE - INSTALLATION CHECK
  594.     AX = FF92h
  595. Return: AX = 0000h if installed
  596.        BX = redirected printer port (FFFFh if no printers redirected)
  597.        CX = version (CH = major, CL = minor)
  598. Note:    PREDIR.EXE is the network printer redirector included as part of the
  599.       PC/TCP system by FTP Software, Inc.
  600. --------N-2AFF93-----------------------------
  601. INT 2A - PC/TCP PREDIR.EXE - ???
  602.     AX = FF93h
  603. Return: AX = ???
  604. --------N-2AFF94-----------------------------
  605. INT 2A - PC/TCP PREDIR.EXE - ???
  606.     AX = FF94h
  607.     BX = ???
  608.     CX = ???
  609.     DX = ???
  610. Return: AX = ???
  611. Note:    PREDIR.EXE is the network printer redirector included as part of the
  612.       PC/TCP system by FTP Software, Inc.
  613. --------N-2AFF95-----------------------------
  614. INT 2A - PC/TCP PREDIR.EXE - GET CONFIGURATION STRINGS
  615.     AX = FF95h
  616.     CX = what to get
  617.         0000h ??? (returned pointer to "C:\COMMAND.COM")
  618.         0001h spooling program
  619.         0002h ???
  620.         0003h spool file name
  621.         0004h swap file name
  622. Return: AX = status
  623.         0000h successful
  624.     BX:DX -> ASCIZ configuration string
  625. --------N-2AFF96-----------------------------
  626. INT 2A - PC/TCP PREDIR.EXE - SET PRINT JOB TERMINATION CONFIGURATION
  627.     AX = FF96h
  628.     CX = what to set
  629.         0000h ???
  630.         0001h print-on-hotkey state
  631.         0002h print-on-exit state
  632.         0003h print job timeout in clock ticks
  633.         0004h print-on-EOF state
  634.     BX = new value (0000h disabled, 0001h enabled except for timeout)
  635. Return: AX = ???
  636. SeeAlso: AX=FF97h
  637. Note:    PREDIR.EXE is the network printer redirector included as part of the
  638.       PC/TCP system by FTP Software, Inc.
  639. --------N-2AFF97-----------------------------
  640. INT 2A - PC/TCP PREDIR.EXE - GET PRINT JOB TERMINATION CONFIGURATION
  641.     AX = FF97h
  642.     CX = what to get
  643.         0000h ???
  644.         0001h print-on-hotkey state
  645.         0002h print-on-exit state
  646.         0003h print job timeout in clock ticks
  647.         0004h print-on-EOF state
  648. Return: AX = status
  649.         0000h successful
  650.     BX = old value (0000h disabled, 0001 enabled except for timeout)
  651. SeeAlso: AX=FF96h
  652. --------D-2B---------------------------------
  653. INT 2B - DOS 2+ - RESERVED
  654. Note:    this vector is not used in DOS versions <= 6.00, and points at an IRET
  655. --------D-2C---------------------------------
  656. INT 2C - DOS 2+ - RESERVED
  657. Note:    this vector is not used in DOS versions <= 6.00, and points at an IRET
  658. --------O-2C---------------------------------
  659. INT 2C - STARLITE architecture - KERNEL API
  660. Note:    STARLITE is an architecture by General Software for a series of MS-DOS
  661.       compatible operating systems (OEM DOS, NETWORK DOS, and SMP DOS) to
  662.       be released in 1991.    The interrupt number is subject to change
  663.       before the actual release.
  664. --------m-2C---------------------------------
  665. INT 2C R - RM386 v6.00 - CLOAKING - CALL PROTECTED-MODE PASSALONG CHAIN
  666. Note:    when this interrupt is invoked in V86 mode, RM386 will invoke the first
  667.       in a chain of protected-mode handlers, and will only pass execution
  668.       to the V86-mode INT 2C handler if none of the handlers in the
  669.       passalong chain handle the call instead.  This is the method by which
  670.       the real-mode stub of a cloaked application communicates with the
  671.       protected-mode portion.
  672. Program: RM386 (RAM-MAN/386) is the memory manager included in Helix Software's
  673.       Netroom
  674. SeeAlso: INT 2C/AX=0009h
  675. --------m-2C0000-----------------------------
  676. INT 2C P - RM386 v6.00 - CLOAKING - ALLOCATE GDT SELECTOR
  677.     AX = 0000h
  678.     EBX = base address
  679.     CL = access mode byte
  680.     CH = extended access mode byte (omit limit field)
  681.     EDX = segment limit
  682. Return: CF clear if successful
  683.         AX = selector
  684.     CF set on error
  685.         AX = error code (see below)
  686. Program: RM386 (RAM-MAN/386) is the memory manager included in Helix Software's
  687.       Netroom
  688. Note:    this INT 2C interface is used by Netroom's DPMI.EXE v3.00
  689. SeeAlso: AX=0001h,AX=0002h,AX=0003h,AX=0004h,AX=0005h,INT 31/AH=57h
  690.  
  691. Values for error code:
  692.  0001h    no more selectors
  693.  0002h    not a GDT ring 0 selector
  694.  0003h    invalid selector (out of range, not user selector)
  695.  0004h    selector not allocated
  696. --------m-2C0001-----------------------------
  697. INT 2C P - RM386 v6.00 - CLOAKING - FREE GDT SELECTOR
  698.     AX = 0001h
  699.     SI = selector
  700. Return: CF clear if successful
  701.     CF set on error
  702.         AX = error code (see AX=0000h)
  703. SeeAlso: AX=0000h
  704. --------m-2C0002-----------------------------
  705. INT 2C P - RM386 v6.00 - CLOAKING - SET SEGMENT BASE ADDRESS
  706.     AX = 0002h
  707.     SI = selector
  708.     EBX = new physical base addres
  709. Return: CF clear if successful
  710.     CF set on error
  711.         AX = error code (see AX=0000h)
  712. Return: AX=0000h,AX=0003h,AX=0004h
  713. --------m-2C0003-----------------------------
  714. INT 2C P - RM386 v6.00 - CLOAKING - SET SEGMENT LIMIT
  715.     AX = 0003h
  716.     SI = selector
  717.     EBX = new limit
  718. Return: CF clear if successful
  719.     CF set on error
  720.         AX = error code (see AX=0000h)
  721. SeeAlso: AX=0000h,AX=0002h,AX=0004h
  722. --------m-2C0004-----------------------------
  723. INT 2C P - RM386 v6.00 - CLOAKING - SET SEGMENT ACCESS MODE
  724.     AX = 0004h
  725.     SI = selector
  726.     CL = new access mode byte
  727. Return: CF clear if successful
  728.     CF set on error
  729.         AX = error code (see AX=0000h)
  730. SeeAlso: AX=0000h,AX=0002h,AX=0003h,AX=0005h
  731. --------m-2C0005-----------------------------
  732. INT 2C P - RM386 v6.00 - CLOAKING - SET SEGMENT EXTENDED ACCESS MODE
  733.     AX = 0005h
  734.     SI = selector
  735.     CL = new extended access mode byte (limit field ignored)
  736. Return: CF clear if successful
  737.     CF set on error
  738.         AX = error code (see AX=0000h)
  739. SeeAlso: AX=0000h,AX=0002h,AX=0003h,AX=0004h
  740. --------m-2C0006-----------------------------
  741. INT 2C P - RM386 v6.00 - CLOAKING - GET PROTECTED-MODE INTERRUPT VECTOR
  742.     AX = 0006h
  743.     CL = vector
  744. Return: CF clear
  745.     DX:EBX -> current interrupt handler
  746. SeeAlso: AX=0007h
  747. --------m-2C0007-----------------------------
  748. INT 2C P - RM386 v6.00 - CLOAKING - SET PROTECTED-MODE INTERRUPT VECTOR
  749.     AX = 0007h
  750.     CL = vector
  751.     DX:EBX -> interrupt handler
  752. Return: CF clear
  753. SeeAlso: AX=0006h
  754. --------m-2C0008-----------------------------
  755. INT 2C P - RM386 v6.00 - CLOAKING - GET PASSALONG ADDRESS
  756.     AX = 0008h
  757. Return: CF clear
  758.     DX:EBX = current passalong address
  759. SeeAlso: AX=0009h,AX=002Ch
  760. --------m-2C0009-----------------------------
  761. INT 2C P - RM386 v6.00 - CLOAKING - SET PASSALONG ADDRESS
  762.     AX = 0009h
  763.     DX:EBX = new value for passalong address
  764. Return: CF clear
  765. Note:    when an INT 2C instruction is executed in V86 mode, RM386 calls the
  766.       passalong address.  The handler should check whether the upcall
  767.       is of interest to it, and if not it should jump to the old passalong
  768.       address (retrieved with AX=0008h before the handler was installed)
  769. SeeAlso: AX=0008h,AX=002Dh,INT 2C"CLOAKING"
  770.  
  771. Passalong address called with:
  772.     EAX = CS:IP of byte following INT 2C instruction invoking passalong
  773.     SS:EBX -> caller registers (see below)
  774.     CF clear
  775.     others undefined
  776. Return: CF clear: pass along to V86-mode INT 2C handler
  777.     CF set: return immediately to V86 mode
  778.  
  779. Format of caller registers:
  780. Offset    Size    Description
  781.  00h    DWORD    EDI
  782.  04h    DWORD    ESI
  783.  08h    DWORD    EBP
  784.  0Ch    DWORD    reserved (ESP from PUSHAD instruction)
  785.  10h    DWORD    EBX
  786.  14h    DWORD    EDX
  787.  18h    DWORD    ECX
  788.  1Ch    DWORD    EAX
  789.  20h    DWORD    error code
  790.  24h    DWORD    EIP
  791.  28h    WORD    CS
  792.  2Ah    WORD    padding
  793.  2Ch    DWORD    EFLAGS
  794.  30h    DWORD    ESP
  795.  34h    WORD    SS
  796.  36h    WORD    padding
  797. --remainder not available if protected-mode ring3 trap---
  798.  38h    WORD    ES
  799.  3Ah    WORD    padding
  800.  3Ch    WORD    DS
  801.  3Eh    WORD    padding
  802.  40h    WORD    FS
  803.  42h    WORD    padding
  804.  44h    WORD    GS
  805.  46h    WORD    padding
  806. --------m-2C000A-----------------------------
  807. INT 2C P - RM386 v6.00 - CLOAKING - GET BASE ADDRESS OF GDT SELECTOR
  808.     AX = 000Ah
  809.     SI = selector
  810. Return: CF clear if successful
  811.         EBX = segment base address
  812.     CF set on error
  813.         AX = error code (see AX=0000h)
  814. Program: RM386 (RAM-MAN/386) is the memory manager included in Helix Software's
  815.       Netroom
  816. SeeAlso: AX=0000h,AX=0002h,AX=000Bh
  817. --------m-2C000B-----------------------------
  818. INT 2C P - RM386 v6.00 - CLOAKING - GET SELECTOR LIMIT
  819.     AX = 000Bh
  820.     SI = selector
  821. Return: CF clear if successful
  822.         EBX = segment base address
  823.     CF set on error
  824.         AX = error code (see AX=0000h)
  825. SeeAlso: AX=000Ah
  826. --------m-2C---------------------------------
  827. INT 2C P - RM386 v6.00 - CLOAKING - RESERVED FOR CLOAKED BIOS USE UNDER WINDOWS
  828.     AX = function (000Ch-001Fh)
  829. --------m-2C0020-----------------------------
  830. INT 2C P - RM386 v6.00 - CLOAKING - GET SIZE OF PROTECTED-MODE STATE
  831.     AX = 0020h
  832. Return: EAX = number of bytes required for storing state
  833. SeeAlso: AX=0021h,AX=0022h
  834. --------m-2C0021-----------------------------
  835. INT 2C P - RM386 v6.00 - CLOAKING - SAVE PROTECTED-MODE STATE
  836.     AX = 0021h
  837.     ES:EDI -> buffer for protected-mode state
  838. Return: CF clear
  839.     buffer filled
  840. SeeAlso: AX=0020h,AX=0022h
  841. --------m-2C0022-----------------------------
  842. INT 2C P - RM386 v6.00 - CLOAKING - RESTORE PROTECTED-MODE STATE
  843.     AX = 0022h
  844.     DS:ESI -> buffer containing previously-saved protected-mode state
  845. Return: CF clear if successful
  846.         state restored
  847.     CF set on error (invalid buffer contents)
  848. SeeAlso: AX=0020h,AX=0021h
  849. --------m-2C0023-----------------------------
  850. INT 2C P - RM386 v6.00 - CLOAKING - ISSUE PROTECTED-MODE XMS CALL
  851.     AX = 0023h
  852. Note:    not currently implemented--NOP in RM386 v6.00
  853. --------m-2C0024-----------------------------
  854. INT 2C P - RM386 v6.00 - CLOAKING - SET V86-MODE STACK
  855.     AX = 0024h
  856.     DX:EBX = new value for V86-mode SS:ESP
  857. Return: nothing
  858. --------m-2C0025-----------------------------
  859. INT 2C P - RM386 v6.00 - CLOAKING - CALL V86-MODE PROCEDURE
  860.     AX = 0025h
  861.     DS:EBX -> client register structure (see AX=0009h)
  862. Return: CF clear if successful
  863.         client register structure updated
  864.     CF set if no more nested procedure call space available
  865. Note:    this call uses the V86-mode stack supplied in the client structure, and
  866.       calls the routine specified by CS:IP in the client structure
  867. SeeAlso: AX=0026h,AX=0027h
  868. --------m-2C0026-----------------------------
  869. INT 2C P - RM386 v6.00 - CLOAKING - CALL V86-MODE INTERRUPT HANDLER
  870.     AX = 0026h
  871.     DS:EBX -> client register structure (see AX=0009h)
  872.     CX = interrupt number
  873. Return: CF clear if successful
  874.         client register structure updated
  875.     CF set if no more nested procedure call space available
  876. Note:    this call uses the V86-mode stack supplied in the client structure
  877. SeeAlso: AX=0025h,AX=0027h
  878. --------m-2C0027-----------------------------
  879. INT 2C P - RM386 v6.00 - CLOAKING - CHAIN TO V86-MODE INTERRUPT HANDLER
  880.     AX = 0027h
  881.     DS:EBX -> client register structure (see AX=0009h)
  882. Return: CF clear if successful
  883.         client register structure updated
  884.     CF set if no more nested procedure call space available
  885. Note:    this call uses the V86-mode stack supplied in the client structure,
  886.       and jumps to the address specified by CS:IP in the client structure
  887. SeeAlso: AX=0025h,AX=0026h
  888. --------m-2C0028-----------------------------
  889. INT 2C P - RM386 v6.00 - CLOAKING - GET ESP0 FROM TSS
  890.     AX = 0028h
  891. Return: CF clear
  892.     EAX = TSS's ESP0
  893. Program: RM386 (RAM-MAN/386) is the memory manager included in Helix Software's
  894.       Netroom
  895. --------m-2C0029-----------------------------
  896. INT 2C P - RM386 v6.00 - CLOAKING - SET SECONDARY STACK
  897.     AX = 0029h
  898.     DX:EBX = new value for SS:ESP of ring 3 secondary stack
  899. Return: CF clear
  900. Desc:    inform RM386 of the ring 3 interrupt stack location
  901. --------m-2C002A-----------------------------
  902. INT 2C P - RM386 v6.00 - CLOAKING - SET 8259 IRQ BASE VECTORS
  903.     AX = 002Ah
  904.     BL = base vector of master interrupt controller
  905.     CL = base vector of slave interrupt controller
  906. Note:    this call merely informs RM386 that the caller has changed the
  907.       interrupt mappings
  908. SeeAlso: INT 67/AX=DE0Bh
  909. --------m-2C002B-----------------------------
  910. INT 2C P - RM386 v6.00 - CLOAKING - PROTECTED-MODE VIRTUAL DMA SERVICES
  911.     AX = 002Bh
  912.     CH = 81h
  913.     CL = subfunction (02h-0Ch)
  914.     other registers as appropriate for subfunction
  915. Return: varies by function
  916.     CF set on error
  917. Note:    these functions are equivalent to the INT 4B/AX=81xxh subfunctions
  918.       with the same numbers
  919. SeeAlso: INT 4B/AX=8102h,INT 4B/AX=810Ch
  920. --------m-2C002C-----------------------------
  921. INT 2C P - RM386 v6.00 - CLOAKING - GET PORT-TRAPPING PASSALONG
  922.     AX = 002Ch
  923. Return: CF clear
  924.     DX:EBX = current I/O trapping passalong address
  925. SeeAlso: AX=0008h,AX=002Dh
  926. --------m-2C002D-----------------------------
  927. INT 2C P - RM386 v6.00 - CLOAKING - SET PORT-TRAPPING PASSALONG
  928.     AX = 002Dh
  929.     DX:EBX = new I/O trapping passalong address
  930. Return: CF clear
  931. Note:    RM386 calls the passalong address whenever an access to a monitored
  932.       I/O port is attempted; the handler should check whether it is a port
  933.       that it is interested in, and if not call the previous passalong
  934.       address (which was retrieved with AX=002Ch before installing the
  935.       new handler)
  936. SeeAlso: AX=0009h,AX=002Ch,INT 67/AX=5DEAh
  937.  
  938. Port-trapping passalong address called with:
  939.     EAX = CS:IP of faulting instruction (unless executing in protected-mode
  940.         ring 3)
  941.     SS:EBX -> caller register structure (see AX=0009h)
  942.         check EFLAGS V86-mode bit for type
  943.     CX = first two bytes of I/O instruction which was trapped
  944.     DX = port to which I/O is being performed
  945.     CF clear
  946. Return: CF clear if RM386 should perform I/O operation
  947.     CF set if I/O should be skipped
  948. Note:    RM386 skips the trapped I/O instruction, so the passalong handler
  949.       should not modify the client CS:EIP
  950. --------m-2C002E-----------------------------
  951. INT 2C P - RM386 v6.00 - CLOAKING - TRAP I/O PORT
  952.     AX = 002Eh
  953.     DX = port number to trap
  954. Return: CF clear if successful
  955.     CF set on error (port out of range or reserved)
  956. Program: RM386 (RAM-MAN/386) is the memory manager included in Helix Software's
  957.       Netroom
  958. SeeAlso: AX=002Fh,AX=0030h
  959. --------m-2C002F-----------------------------
  960. INT 2C PU - RM386 v6.00 - CLOAKING - UNTRAP I/O PORT
  961.     AX = 002Fh
  962.     DX = port number for which to cancel trapping
  963. Return: CF clear if successful
  964.     CF set on error (port out of range or reserved)
  965. SeeAlso: AX=002Eh,AX=0030h
  966. --------m-2C0030-----------------------------
  967. INT 2C PU - RM386 v6.00 - CLOAKING - GET TRAPPING STATE OF SPECIFIED PORT
  968.     AX = 0030h
  969.     DX = port number
  970. Return: CF clear if successful
  971.        BX = current state (0000h not trapped, 0001h trapped)
  972.     CF set on error (port out of range or reserved)
  973. SeeAlso: AX=002Eh,AX=002Fh
  974. --------m-2C0031-----------------------------
  975. INT 2C PU - RM386 v6.00 - BUG
  976.     AX = 0031h
  977. Program: RM386 (RAM-MAN/386) is the memory manager included in Helix Software's
  978.       Netroom
  979. Note:    due to a fencepost error, RM386 v6.00 will branch unpredictably if
  980.       invoked with this function
  981. --------D-2D---------------------------------
  982. INT 2D - DOS 2+ - RESERVED
  983. Note:    this vector is not used in DOS versions <= 6.00, and points at an IRET
  984. --------t-2D---------------------------------
  985. INT 2D - ALTERNATE MULTIPLEX INTERRUPT SPECIFICATION (AMIS) [v3.5.1]
  986.     AH = multiplex number
  987.     AL = function
  988.         00h installation check
  989.         Return: AL = 00h if free
  990.             AL = FFh if multiplex number in use
  991.                 CX = binary version number (CH = major, CL = minor)
  992.                 DX:DI -> signature string (see below) identifying
  993.                     the program using the multiplex number
  994.         01h get entry point
  995.         Return: AL = 00h if all API calls via INT 2D
  996.             AL = FFh if entry point supported
  997.                 DX:BX -> entry point for bypassing interrupt chain
  998.         02h uninstall
  999.         DX:BX = return address for successful uninstall (may be
  1000.             ignored by TSR)
  1001.         Return: AL = status
  1002.                 00h not implemented
  1003.                 01h unsuccessful
  1004.                 02h can not uninstall yet, will do so when able
  1005.                 03h safe to remove, but no resident uninstaller
  1006.                 (TSR still enabled)
  1007.                 BX = segment of memory block with resident code
  1008.                 04h safe to remove, but no resident uninstaller
  1009.                 (TSR now disabled)
  1010.                 BX = segment of memory block with resident code
  1011.                 05h not safe to remove now, try again later
  1012.                 FFh successful
  1013.             return at DX:BX with AX destroyed if successful and
  1014.               TSR honors specific return address
  1015.         03h request pop-up
  1016.         Return: AL = status
  1017.                 00h not implemented or TSR is not a pop-up
  1018.                 01h can not pop up at this time, try again later
  1019.                 02h can not pop up yet, will do so when able
  1020.                 03h already popped up
  1021.                 04h unable to pop up, user intervention required
  1022.                 BX = standard reason code
  1023.                     0000h unknown failure
  1024.                     0001h interrupt chain passes through memory
  1025.                       which must be swapped out to pop up
  1026.                     0002h swap-in failed
  1027.                 CX = application's reason code if nonzero
  1028.                 FFh TSR popped up and was exited by user
  1029.                 BX = return value
  1030.                     0000h no return value
  1031.                     0001h TSR unloaded
  1032.                     0002h-00FFh reserved
  1033.                     0100h-FFFFh application-dependent
  1034.         04h determine chained interrupts
  1035.         BL = interrupt number (except 2Dh)
  1036.         Return: AL = status
  1037.                 00h not implemented
  1038.                 01h (obsolete) unable to determine
  1039.                 02h (obsolete) interrupt hooked
  1040.                 03h (obsolete) interrupt hooked, address returned
  1041.                 DX:BX -> TSR's interrupt BL handler
  1042.                 04h list of hooked interrupts returned
  1043.                 DX:BX -> interrupt hook list (see below)
  1044.                 FFh interrupt not hooked
  1045.         Notes:    since INT 2D is known to be hooked, the resident code
  1046.               need not test for BL=2Dh (to minimize its size), and
  1047.               the return value is therefore undefined in that case.
  1048.             BL is ignored if the TSR returns AL=04h; in that case,
  1049.               the caller needs to scan the return list rather than
  1050.               making additional calls to this function.  If the
  1051.               return is not 00h or 04h, then the caller must cycle
  1052.               through the remaining interrupt numbers it wishes to
  1053.               check.
  1054.             return values 01h thru 03h are disparaged and will be
  1055.               removed from the next version of this specification;
  1056.               they are included for compatibility with version 3.3,
  1057.               though they were probably never used in any
  1058.               implementation
  1059.         05h get hotkeys
  1060.         Return: AL = status
  1061.                 00h not implemented
  1062.                 FFh supported
  1063.                 DX:BX -> hotkey list (see below)
  1064.         06h-0Fh reserved for future enhancements
  1065.         Return: AL = 00h (not implemented)
  1066.         other  application-dependent
  1067. Notes:    programs should not use fixed multiplex numbers; rather, a program
  1068.       should scan all multiplex numbers from 00h to FFh, remembering the
  1069.       first unused multiplex in case the program is not yet installed.
  1070.       For multiplex numbers which are in use, the program should compare
  1071.       the first 16 bytes of the signature string to determine whether it
  1072.       is already installed on that multiplex number.  If not previously
  1073.       installed, it should use the first free multiplex number.
  1074.     functions other than 00h are not valid unless a program is installed
  1075.       on the selected multiplex number
  1076.     to be considered fully compliant with version 3.5 of the specification,
  1077.       programs must implement at least functions 00h, 02h (no resident
  1078.       uninstall code required), and 04h (return value 04h).     TSRs that
  1079.       provide hotkeys with which the user can activate them must also
  1080.       implement function 05h.  The absolute minimum fully-compliant
  1081.       implementation has an overhead of 64 bytes (80 bytes with function
  1082.       05h) plus 22 bytes per hooked interrupt (for the interrupt sharing
  1083.       protocol header and hook list entry).
  1084.     the signature string and description may be used by memory mappers
  1085.       to display the installed programs
  1086.     users of this proposal should adhere to the IBM interrupt sharing
  1087.       protocol (see below), which will permit removal of TSRs in
  1088.       arbitrary order and interrupt handler reordering.  All TSRs
  1089.       following this proposal should be removable, though they need not
  1090.       keep the code for removing themselves resident; it is acceptable
  1091.       for a separate program to perform the removal.
  1092.     A sample implementation including example TSRs and utility programs
  1093.       may be found in a separate package distributed as AMISLnnn.ZIP
  1094.       (AMISL091.ZIP as of this writing).
  1095.     Please let me know if you choose to follow this proposal.  The
  1096.       signature and a list of the private API calls you use would be
  1097.       appreciated, as well.
  1098. SeeAlso: INT 2F
  1099. Index:    installation check;Alternate Multiplex Interrupt Specification
  1100. Index:    installation check;AMIS|installation check;FASTMOUS
  1101. Index:    installation check;SPELLER|installation check;Monitor
  1102. Index:    installation check;NOLPT|installation check;NOTE
  1103. Index:    installation check;RBkeyswp|installation check;SWITCHAR
  1104. Index:    installation check;VGABLANK|installation check;EATMEM
  1105. Index:    installation check;RECALL|installation check;XPTR2
  1106. Index:    uninstall;Alternate Multiplex Interrupt Specification|uninstall;AMIS
  1107. Index:    entry point;Alternate Multiplex Interrupt|entry point;AMIS
  1108.  
  1109. Format of signature string:
  1110. Offset    Size    Description
  1111.  00h  8 BYTEs    blank-padded manufacturer's name (possibly abbreviated)
  1112.  08h  8 BYTEs    blank-padded product name
  1113.  10h 64 BYTEs    ASCIZ product description (optional, may be a single 00h)
  1114. Note:    it is not necessary to reserve a full 64 bytes for the description,
  1115.       just enough to store the actual ASCIZ string
  1116.  
  1117. Format of interrupt hook list [array]:
  1118. Offset    Size    Description
  1119.  00h    BYTE    interrupt number (last entry in array is 2Dh)
  1120.  01h    WORD    offset within hook list's segment of the interrupt handler
  1121.         this will point at the initial short jump of the interrupt
  1122.         sharing protocol header (see below)
  1123.  
  1124. Format of hotkey list:
  1125. Offset    Size    Description
  1126.  00h    BYTE    type of hotkey checking
  1127.         bit 0: checks before chaining INT 09
  1128.         bit 1: checks after chaining INT 09
  1129.         bit 2: checks before chaining INT 15/AH=4Fh
  1130.         bit 3: checks after chaining INT 15/AH=4Fh
  1131.         bit 4: checks on INT 16/AH=00h,01h,02h
  1132.         bit 5: checks on INT 16/AH=10h,11h,12h
  1133.         bit 6: checks on INT 16/AH=20h,21h,22h
  1134.         bit 7: reserved (0)
  1135.  01h    BYTE    number of hotkeys (may be zero if TSR can disable hotkeys)
  1136.  02h 6N BYTEs    array of hotkey definitions
  1137.         (one per hotkey, first should be primary hotkey)
  1138.         Offset    Size    Description
  1139.          00h    BYTE    hotkey scan code (00h/80h if shift states only)
  1140.                 hotkey triggers on release if bit 7 set
  1141.          01h    WORD    required shift states (see below)
  1142.          03h    WORD    disallowed shift states (see below)
  1143.          05h    BYTE    flags
  1144.                 bit 0: hotkey chained before processing
  1145.                 bit 1: hotkey chained after processing
  1146.                 bit 2: others should pass through this hotkey
  1147.                     so that it can be monitored
  1148.                 bit 3: hotkey will not activate if other keys
  1149.                     pressed/released before hotkey press is
  1150.                     completed
  1151.                 bit 4: this key is remapped into some other key
  1152.                 bit 5-7: reserved (0)
  1153. Notes:    except for bit 7, the shift states correspond exactly to the return
  1154.       values from INT 16/AH=12h.  A set bit in the required states word
  1155.       indicates that the corresponding shift state must be active when the
  1156.       hotkey's scan code is received for the hotkey to be recognized; a
  1157.       clear bit means that the corresponding state may be ignored.    A set
  1158.       bit in the disallowed shift states word indicates that the
  1159.       corresponding shift state must be inactive.
  1160.     if bit 2 is set, either control key may be pressed for the hotkey; if
  1161.       bits 8 and 10 are both set, then both control keys must be pressed.
  1162.       Similarly for bits 3 and 9/11, as well as 7 and 0/1.
  1163.     for the disallowed-states word, if one of the "either" bits is set,
  1164.       then both the corresponding left bit and right bit must be set
  1165.     examples:
  1166.         Ctrl-Alt-Del monitoring: 53h 000Ch 0003h 06h
  1167.         Alt-key tap (DESQview):     B8h 0000h 0007h 08h
  1168.         Shf-Shf-N (NOTE.COM):     31h 0003h 000Ch 00h
  1169. Index:    hotkeys;AMIS
  1170.  
  1171. Bitfields for shift states:
  1172.  bit 0    right shift pressed
  1173.  bit 1    left shift pressed
  1174.  bit 2    either control key pressed
  1175.  bit 3    either Alt key pressed
  1176.  bit 4    ScrollLock active
  1177.  bit 5    NumLock active
  1178.  bit 6    CapsLock active
  1179.  bit 7    either shift key pressed
  1180.  bit 8    left control key pressed
  1181.  bit 9    left Alt key pressed
  1182.  bit 10 right control key pressed
  1183.  bit 11 right Alt key pressed
  1184.  bit 12 ScrollLock pressed
  1185.  bit 13 NumLock pressed
  1186.  bit 14 CapsLock pressed
  1187.  bit 15 SysRq key pressed
  1188.  
  1189. Format of interrupt sharing protocol interrupt handler entry point:
  1190. Offset    Size    Description
  1191.  00h  2 BYTEs    short jump to actual start of interrupt handler, immediately
  1192.         following this data block (EBh 10h)
  1193.  02h    DWORD    address of next handler in chain
  1194.  06h    WORD    signature 424Bh
  1195.  08h    BYTE    EOI flag
  1196.         00h software interrupt or secondary hardware interrupt handler
  1197.         80h primary hardware interrupt handler (will issue EOI)
  1198.  09h  2 BYTEs    short jump to hardware reset routine
  1199.         must point at a valid FAR procedure (may be just RETF)
  1200.  0Bh  7 BYTEs    reserved (0)
  1201.  
  1202. Signatures known to be in use:
  1203.  'Byrial J' 'EKLAVO  '    permits keyboard entry of Esperanto accented letters
  1204.  'CoveSoft' 'Burnout+'    shareware screen saver Burnout Plus
  1205.  'Crynwr  ' 'SPELLER '    TSR spelling-checker
  1206.  'CSJewell' 'Modula3L'    Curtis Jewell's Modula-3 compiler (non-TSR)
  1207.  'ECLIPSE ' 'PLUMP   '    Eclipse Software's printer and plotter spooler
  1208.  'GraySoft' 'GIPC    '    GraySoft's Inter-Process Communications driver
  1209.  'heathh  ' 'Monitor '
  1210.  'J. Berry' 'RATSR   '    RemoteAccess Network Manager workstation module
  1211.  'JWB      ' 'RAMLIGHT'    James Birdsall's on-screen RAMdisk activity indicator
  1212.  'Nildram ' 'ST         '    Screen Thief graphics screen grabber
  1213.  'R-Ware  ' 'dLite   '    run-time data decompression TSR
  1214.  'Ralf B  ' 'FASTMOUS'    example TSR included with sample AMIS library code
  1215.  'Ralf B  ' 'NOLPT n '    example TSR -- turn LPTn into bit-bucket
  1216.  'Ralf B  ' 'NOTE    '    example TSR -- popup note-taker
  1217.  'Ralf B  ' 'RBkeyswp'    RBkeyswap v3.0+ -- swap Esc/~ and LCtrl/CapsLock keys
  1218.  'Ralf B  ' 'SWITCHAR'    example TSR -- add switchar() support removed from DOS5
  1219.  'Ralf B  ' 'VGABLANK'    example TSR -- VGA-only screen blanker
  1220.  'Sally IS' 'Mdisk   '    removeable, resizeable RAMdisk
  1221.  'Sally IS' 'Scr2Tex '    screen dumper with output in (La)Tex format
  1222.  'Thaco      ' 'NEST    '    Eirik Pedersen's programmer's delimiter matcher
  1223.  'TifaWARE' 'EATMEM  '    George A. Theall's public domain memory restrictor for
  1224.             testing programs (v1.1+)
  1225.  'TifaWARE' 'RECALL  '    public domain commandline editor and history (v1.2+)
  1226.  'Todd      ' 'XPTR2   '    PC-to-Transputer interface by Todd Radel
  1227. --------N-2D--10-----------------------------
  1228. INT 2D - RATSR 2.0+ - GET STATUS
  1229.     AL = 10h
  1230.     AH = AMIS multiplex number for RATSR
  1231. Return: AL = status
  1232.         01h listening (no connection)
  1233.         02h receiving          \
  1234.         03h sending               > station being monitored
  1235.         04h initializing receive  /
  1236.     AH = keyboard lock status (00h unlocked, 01h locked)
  1237. Program: RATSR is a utility by James Berry provided with
  1238.       RemoteAccess/Professional, a commercial bulletin board system, that
  1239.       allows remote control of a station over a network
  1240. SeeAlso: INT 2D"AMIS"
  1241. ----------2D--10-----------------------------
  1242. INT 2D - dLite 1.0+ - GET PARAMETER BLOCK ADDRESS
  1243.     AL = 10h
  1244.     AH = AMIS multiplex number for dLite
  1245. Return: CF clear if successful
  1246.         ES:BX -> parameter block (see below)
  1247.     CF set on error
  1248. Program: dLite is a shareware TSR by Rainer Schuetze which transparently
  1249.       expands compressed files when they are read
  1250. SeeAlso: AL=11h"dLite",AL=12h"dLite",INT 21/AX=FEDCh"PCMANAGE"
  1251.  
  1252. Format of parameter block:
  1253. Offset    Size    Description
  1254.  00h    BYTE    TSR flags
  1255.         bit 0: deny FCB access
  1256.         bit 1: dLite sleeping rather than activated
  1257.         bit 2: always indicate original filesize when reading
  1258.             directory entries, rather than only for specified
  1259.             programs
  1260.         bits 3-7 reserved
  1261.  01h    WORD    maximum number of programs needing original filesize
  1262.  03h    WORD    current number of programs needing original filesize
  1263.  05h    WORD    maximum number of files that can be handled by dLite (should
  1264.         be the same as FILES= in CONFIG.SYS)
  1265.  07h    WORD    offset (in the same segment as the parameter block) of the
  1266.         table of programs needing the original filesize (8 bytes each,
  1267.         without path or extension, uppercase, and zero terminated if
  1268.         shorter than 8 bytes)
  1269. ----------2D--10-----------------------------
  1270. INT 2D - Burnout Plus v3.00 - GET STATE/CONTROL INFORMATION
  1271.     AL = 10h
  1272.     AH = AMIS multiplex number for Burnout Plus
  1273. Return: AL = 01h
  1274.     BX = Burnout Plus status (see below)
  1275.     CX = Record of features loaded (see below)
  1276.     ES:DI -> Burnout Plus control structure (see below)
  1277. Program: Burnout Plus is a DOS screen saver from Cove Software
  1278. SeeAlso: INT 2D"AMIS"
  1279. Index:    screen saver;Burnout Plus
  1280.  
  1281. Bitfields for status:
  1282.  bit 0    screen is blanked
  1283.  bit 1    MS Windows is active (Burnout Plus deactivated)
  1284.  bits 2-15 reserved
  1285.  
  1286. Bitfields for features loaded/features enabled:
  1287.  bit 0    mouse activity monitor
  1288.  bit 1    passkey support
  1289.  bit 2    password support
  1290.  bit 3    continuous clear
  1291.  bit 4    software blanking
  1292.  bit 5    video activity monitor
  1293.  bit 6    disk activity monitor
  1294.  bit 7    activating keystroke suppression
  1295.  
  1296. Format of Burnout Plus control structure:
  1297. Offset    Size    Description
  1298.  00h    BYTE    size of structure in bytes
  1299.  01h    WORD    Burnout Plus version
  1300.  03h    WORD    screen blanking reset count in clock ticks
  1301.  05h    WORD    current countdown value in clock ticks
  1302.  07h    BYTE    type of timeout specification
  1303.  08h    BYTE    instant-blank hotkey
  1304.  09h    WORD    extended status information (see below)
  1305.         the bits for password, passkey, and software blanking are
  1306.           ignored and cannot be enabled or disabled externally
  1307.  0Bh    WORD    features enabled (see above)
  1308. Note:    all fields except the first two may be modified by external programs
  1309.       to affect the operation of Burnout Plus
  1310. Index:    hotkeys;Burnout Plus
  1311.  
  1312. Bitfields for extended status information:
  1313.  bit 0    Burnout Plus disabled
  1314.  bit 1    force screen to blank on next clock tick
  1315.  bit 2    restore screen if currently blanked
  1316.  bits 3-15 reserved
  1317. Note:    bits 1 and 2 are automatically cleared by Burnout Plus after blanking
  1318.       or restoring the screen
  1319. ----------2D--10-----------------------------
  1320. INT 2D U - Screen Thief v1.00 - FREE HIGH MEMORY BUFFERS
  1321.     AL = 10h
  1322.     AH = AMIS multiplex number for Screen Thief
  1323. Return: nothing
  1324. Program: Screen Thief is a graphics screen grabber
  1325. Note:    releases any code and data stored in EMS, DOS UMBs, or XMS UMBs, but
  1326.       does not release the low-memory stub; this may be used to effect a
  1327.       partial uninstall if INT 2D/AL=02h fails
  1328. SeeAlso: INT D8"Screen Thief"
  1329. ----------2D--10-----------------------------
  1330. INT 2D U - RAMLIGHT v1.0 - GET MONITORING INFORMATION
  1331.     AL = 10h
  1332.     AH = AMIS multiplex number for RAMLIGHT
  1333. Return: ES:BX -> array of fake device driver headers used in monitoring
  1334.     CX = number of drives being monitored???
  1335. ----------2D--11-----------------------------
  1336. INT 2D - dLite 1.0+ - CHECK FOR dPressed FILE AND GET ORIGINAL SIZE
  1337.     AL = 11h
  1338.     AH = AMIS multiplex number for dLite
  1339.     BX = file handle
  1340. Return: CF clear if successful
  1341.         DX:AX = size of uncompressed file
  1342.     CF set on error (not dPressed file)
  1343. SeeAlso: AL=10h"dLite",AL=12h"dLite"
  1344. ----------2D--12-----------------------------
  1345. INT 2D - dLite 1.0+ - CHECK FOR dPressed FILE AND GET COMPRESSED SIZE
  1346.     AL = 12h
  1347.     AH = AMIS multiplex number for dLite
  1348.     BX = file handle
  1349. Return: CF clear if successful
  1350.         DX:AX = size of compressed file
  1351.     CF set on error (not dPressed file)
  1352. SeeAlso: AL=10h"dLite",AL=11h"dLite"
  1353. --------l-2E---------------------------------
  1354. INT 2E U - DOS 2+ - PASS COMMAND TO COMMAND INTERPRETER FOR EXECUTION
  1355.     DS:SI -> commandline to execute (see below)
  1356. Return: all registers except CS:IP destroyed
  1357.     AX = status (4DOS v4.0)
  1358.        0000h successful
  1359.        FFFFh error before processing command (not enough memory, etc)
  1360.        other error number returned by command
  1361. Notes:    this call allows execution of arbitrary commands (including COMMAND.COM
  1362.       internal commands) without loading another copy of COMMAND.COM
  1363.     if COMMAND.COM is the user's command interpreter, the primary copy
  1364.       executes the command; this allows the master environment to be
  1365.       modified by issuing a "SET" command, but changes in the master
  1366.       environment will not become effective until all programs descended
  1367.       from the primary COMMAND.COM terminate
  1368.     since COMMAND.COM processes the string as if typed from the keyboard,
  1369.       the transient portion needs to be present, and the calling program
  1370.       must ensure that sufficient memory to load the transient portion can
  1371.       be allocated by DOS if necessary
  1372.     results are unpredictable if invoked by a program run from a batch file
  1373.       because this call is not reentrant and COMMAND.COM uses the same
  1374.       internal variables when processing a batch file
  1375.     hooked but ignored by 4DOS v3.0 COMMAND.COM replacement unless SHELL2E
  1376.       has been loaded
  1377.     the MS-DOS 5 Programmer's Reference calls this "Reload Transient"
  1378.  
  1379. Format of commandline:
  1380. Offset    Size    Description
  1381.  00h    BYTE    length of command string, not counting trailing CR
  1382.  01h    var    command string
  1383.   N    BYTE    0Dh (CR)
  1384. ----------2E---------------------------------
  1385. INT 2E UP - Windows NT - NATIVE API
  1386.     EAX = function number
  1387.     EDX = address of parameter block
  1388. Return: ???
  1389. --------l-2E----BXE22E-----------------------
  1390. INT 2E - 4DOS v2.x-3.03 SHELL2E.COM - UNINSTALL
  1391.     BX = E22Eh
  1392.     DS:SI -> zero byte
  1393. Return: if successful, SHELL2E terminates itself with INT 21/AH=4Ch
  1394. ----------2F---------------------------------
  1395. INT 2F - Multiplex - NOTES
  1396.     AH = identifier of program which is to handle the interrupt
  1397.        00h-7Fh reserved for DOS
  1398.        B8h-BFh reserved for networks
  1399.        C0h-FFh reserved for applications
  1400.     AL is the function code
  1401.    This is a general mechanism for verifying the presence of a TSR and
  1402.    communicating with it.  When searching for a free identifier code for AH
  1403.    using the installation check (AL=00h), the calling program should set
  1404.    BX/CX/DX to 0000h and must not depend on any registers other than CS:IP
  1405.    and SS:SP to be valid on return, since numerous programs now use additional
  1406.    registers on input and/or output for the installation check.
  1407. Notes:    Since the multiplex chain is growing so long, and beginning to
  1408.       experience multiplex number collisions, I am proposing an alternate
  1409.       multiplex interrupt on INT 2D.  If you decide to use the alternate
  1410.       multiplex, please let me know.
  1411.     DOS and some other programs return values in the flags register, so
  1412.       any TSR which chains by calling the previous handler rather than
  1413.       jumping to it should ensure that the returned flags are preserved
  1414.       and passed back to the original caller
  1415. SeeAlso: INT 2D
  1416. --------t-2F---------------------------------
  1417. INT 2F - BMB Compuscience Canada Utilities Interface - INSTALLATION CHECK
  1418.     AH = xx (dynamically assigned based upon a search for a multiplex
  1419.          number which doesn't answer installed)
  1420.     AL = 00h installation check
  1421.     ES:DI = EBEBh:BEBEh
  1422. Return: AL = 00h not installed
  1423.          01h not installed, not OK to install
  1424.          FFh installed; if ES:DI was EBEBh:BEBEh on entry, ES:DI will point
  1425.          to a string of the form 'MMMMPPPPPPPPvNNNN' where MMMM is a
  1426.          short form of the manufacturer's name, PPPPPPPP is a product
  1427.          name and NNNN is the product's version number
  1428. --------t-2F---------------------------------
  1429. INT 2F - Ross Wentworth's Turbo Pascal POPUP LIBRARY
  1430.     AH = programmer-selected multiplex number
  1431.     AL = function
  1432.         00h installation check
  1433.         Return: AL = FFh if installed
  1434.         01h get TSR interrupt vectors
  1435.         Return: DX:AX -> vector table (see below)
  1436.         02h get TSR code segment
  1437.         Return: AX = code segment for all interrupt handlers
  1438.         03h call user exit routine and release TSR's memory
  1439.         04h get signature string
  1440.         Return: DX:AX -> counted string containing signature
  1441.         05h get TSR's INT 2F handler
  1442.         Return: DX:AX -> INT 2F handler
  1443.         06h enable/disable TSR
  1444.         BL = new state (00h disabled, 01h enabled)
  1445.         07h activate TSR (popup if not disabled)
  1446.         08h get hotkeys
  1447.         BL = which hotkey (00h = hotkey 1, 01h = hotkey 2)
  1448.         Return: AX = hotkey (AH = keyflags, AL = scancode)
  1449.         09h set hotkey
  1450.         BL = which hotkey (00h = hotkey 1, 01h = hotkey 2)
  1451.         CX = new hotkey (CH = keyflags, CL = scancode)
  1452.         0Ah-1Fh reserved
  1453. Index:    installation check;Ross Wentworth POPUP library
  1454. Index:    hotkeys;Ross Wentworth POPUP library
  1455.  
  1456. Format of vector table entry:
  1457. Offset    Size    Description
  1458.  00h    BYTE    vector number (00h = end of table)
  1459.  01h    DWORD    original vector
  1460.  05h    WORD    offset of interrupt handler in TSR's code segment
  1461. --------t-2F---------------------------------
  1462. INT 2F - CiriSOFT Spanish University of Valladolid TSR's Interface
  1463.     AH = xx (dynamically assigned based upon a search for a multiplex
  1464.          number from C0h to FFh which doesn't answer installed)
  1465.     AL = 00h installation check
  1466.     ES:DI = 1492h:1992h
  1467. Return: AL = 00h not installed
  1468.          01h not installed, not OK to install
  1469.          FFh installed; and if ES:DI was 1492h:1992h on entry, ES:DI will
  1470.          point to author_name_ver table (see below)
  1471.     AH = FFh
  1472. Note:    this interface permits advanced communication with TSRs: it is possible
  1473.       to make a generic uninstall utility, advanced TSR relocator programs
  1474.       in order to fit fragmented memory areas, etc.
  1475. See also: INT 2D"AMIS",INT 2F"Compuscience"
  1476. Index:    installation check;CiriSOFT TSR interface
  1477. Index:    uninstall;CiriSOFT TSR interface
  1478.  
  1479. Format of author_name_ver table:
  1480. Offset    Size    Description
  1481.  -16    WORD    segment of the start of the resident TSR code (CS in programs
  1482.         with PSP, XMS upper memory segment if installed as UMB...)
  1483.  -14    WORD    offset of the start of the resident TSR code (frequently 100h
  1484.         in *.COM programs and 0 in upper memory TSR's).
  1485.  -12    WORD    memory used by TSR (in paragraphs). Knowing the memory area
  1486.         used by TSR is possible to determine if hooked vectors are
  1487.         still pointing it (and if it is safe to uninstall).
  1488.  -10    BYTE    characteristics byte
  1489.         bits 0-2: 000 normal program (with PSP)
  1490.               001 upper XMS memory block (needed HIMEM.SYS function
  1491.                   to free memory when uninstalling)
  1492.               010 device driver (*.SYS)
  1493.               011 device driver in EXE format
  1494.               1xx others (reserved)
  1495.         bits 3-6 reserved
  1496.         bit 7 set if extra_table defined and supported
  1497.  -9    BYTE    number of multiplex entry used (redefinition available). Note
  1498.         that the TSR must be use THIS variable in it's INT 2Fh handler.
  1499.  -8    WORD    offset to vector_area table (see below)
  1500.  -6    WORD    offset to extra_area table (see bit 7 in offset -10 and below)
  1501.  -4   4 BYTEs    signature string "*##*"
  1502.  00h    var    "AUTHOR:PROGRAM_NAME:VERSION",0     (variable length, this area
  1503.         is used in order to determine if the TSR is already resident
  1504.         and it's version code; the ':' char is used as delimiter)
  1505.  
  1506. Format of vector_area table:
  1507. Offset    Size    Description
  1508.  -1    BYTE    number of vectors intercepted by TSR
  1509.  00h    BYTE    first vector number
  1510.  01h    DWORD    first vector pointer before installing the TSR
  1511.  05h    BYTE    second vector number
  1512.  06h    DWORD    second vector pointer before installing the TSR
  1513.  0Ah    ...    (and so on)
  1514. Note:    the TSR must use these variables to invoke the previous interrupt
  1515.       handler routines
  1516.  
  1517. Format of extra_area table (needed only to improve relocation feature):
  1518. Offset    Size    Description
  1519.  00h    WORD    offset to external_ctrl table (0 if not supported)
  1520.  02h    WORD    reserved for future use (0)
  1521.  
  1522. Format of external_ctrl table:
  1523. Offset    Size    Description
  1524.  00h    BYTE    bit 0: TSR is relocatable (no absolute segment references)
  1525.  01h    WORD    offset to a variable which can activate/inhibit the TSR
  1526.  ---And if bit 0 in offset 00h is off:
  1527.  03h    DWORD    pointer to ASCIZ pathname for executable file which supports
  1528.         /SR parameter (silent installation & inhibit)
  1529.  07h    DWORD    pointer to first variable to initialize on the copy reloaded
  1530.         from the previous TSR still resident
  1531.  0Bh    DWORD    pointer to last variable (all variables packed in one block)
  1532. --------N-2F---------------------------------
  1533. INT 2F U - PC LAN PROGRAM REDIR/REDIRIFS internal - ???
  1534.     AX = 02xxh
  1535.     ???
  1536. Return: ???
  1537. --------c-2F00-------------------------------
  1538. INT 2F U - DOS 2.x only PRINT.COM - ???
  1539.     AH = 00h
  1540.     ???
  1541. Return: ???
  1542. Notes:    DOS 2.x PRINT.COM does not chain to previous INT 2F handler
  1543.     values in AH other than 00h or 01h cause PRINT to return the number of
  1544.       files in the queue in AH
  1545. SeeAlso: AH=01h
  1546. ----------2F00-------------------------------
  1547. INT 2F U - PSPRINT - PRINT JOB CONTROL
  1548.     AH = 00h
  1549.     ???
  1550. Return: ???
  1551. --------c-2F0080-----------------------------
  1552. INT 2F - DOS 3.1+ PRINT.COM - GIVE PRINT A TIME SLICE
  1553.     AX = 0080h
  1554. Return: after PRINT executes
  1555. Note:    PRINT returns AL=01h if AH=00h but AL is not 80h on entry
  1556. --------c-2F01-------------------------------
  1557. INT 2F U - DOS 2.x only PRINT.COM - ???
  1558.     AH = 01h
  1559.     ???
  1560. Return: ???
  1561. Notes:    DOS 2.x PRINT.COM does not chain to previous INT 2F handler
  1562.     values in AH other than 00h or 01h cause PRINT to return the number of
  1563.       files in the queue in AH
  1564. SeeAlso: AH=00h
  1565. --------c-2F0100-----------------------------
  1566. INT 2F - DOS 3+ PRINT.COM - INSTALLATION CHECK
  1567.     AX = 0100h
  1568. Return: AL = status
  1569.         00h not installed
  1570.         01h not installed, but not OK to install
  1571.         FFh installed
  1572. SeeAlso: AX=0101h
  1573. --------c-2F0101-----------------------------
  1574. INT 2F - DOS 3+ PRINT.COM - SUBMIT FILE FOR PRINTING
  1575.     AX = 0101h
  1576.     DS:DX -> submit packet (see below)
  1577. Return: CF clear if successful
  1578.         AL = 01h added to queue
  1579.          9Eh now printing
  1580.     CF set on error
  1581.         AX = error code (see also INT 21/AH=59h)
  1582.         01h invalid function
  1583.         02h file not found
  1584.         03h path not found
  1585.         04h out of file handles
  1586.         05h access denied
  1587.         08h print queue full
  1588.         09h spooler busy
  1589.         0Ch name too long
  1590.         0Fh invalid drive
  1591. SeeAlso: AX=0102h
  1592.  
  1593. Format of submit packet:
  1594. Offset    Size    Description
  1595.  00h    BYTE    level (must be 00h)
  1596.  01h    DWORD    pointer to ASCIZ filename (no wildcards)
  1597. --------c-2F0102-----------------------------
  1598. INT 2F - DOS 3+ PRINT.COM - REMOVE FILE FROM PRINT QUEUE
  1599.     AX = 0102h
  1600.     DS:DX -> ASCIZ filename (wildcards allowed)
  1601. Return: CF clear if successful
  1602.     CF set on error
  1603.         AX = error code (see AX=0101h)
  1604. SeeAlso: AX=0101h,AX=0103h
  1605. --------c-2F0103-----------------------------
  1606. INT 2F - DOS 3+ PRINT.COM - CANCEL ALL FILES IN PRINT QUEUE
  1607.     AX = 0103h
  1608. Return: CF clear if successful
  1609.     CF set on error
  1610.         AX = error code (see AX=0101h)
  1611. SeeAlso: AX=0102h
  1612. --------c-2F0104-----------------------------
  1613. INT 2F - DOS 3+ PRINT.COM - FREEZE PRINT QUEUE TO READ JOB STATUS
  1614.     AX = 0104h
  1615. Return: CF clear if successful
  1616.         DX = error count since status last read
  1617.         DS:SI -> print queue
  1618.     CF set on error
  1619.         AX = error code (see AX=0101h)
  1620. Desc:    get the list of print jobs, temporarily suspending PRINT's activities
  1621.       to avoid changing the list while it is being examined
  1622. Notes:    the print queue is an array of 64-byte ASCIZ filenames terminated by
  1623.       an empty filename; the first name is the file currently being printed
  1624.     printing is stopped until AX=0105h is called to prevent the queue
  1625.       from changing while the filenames are being read
  1626. SeeAlso: AX=0101h,AX=0105h
  1627. --------c-2F0105-----------------------------
  1628. INT 2F - DOS 3+ PRINT.COM - RESTART PRINT QUEUE AFTER STATUS READ
  1629.     AX = 0105h
  1630. Return: CF clear if successful
  1631.     CF set on error
  1632.         AX = error code (see AX=0101h)
  1633. Desc:    restart PRINT's activities once an application finishes examining the
  1634.       print queue
  1635. SeeAlso: AX=0104h
  1636. --------c-2F0106-----------------------------
  1637. INT 2F - DOS 3.3+ PRINT.COM - GET PRINTER DEVICE
  1638.     AX = 0106h
  1639. Return: CF set if files in print queue
  1640.         AX = error code 0008h (queue full)
  1641.         DS:SI -> device driver header
  1642.     CF clear if print queue empty
  1643.         AX = 0000h
  1644. Desc:    determine which device, if any, PRINT is currently using for output
  1645. Notes:    documented for DOS 5+, but not documented for prior versions
  1646.     this function can be used to allow a program to avoid printing to the
  1647.       printer on which PRINT is currently performing output
  1648. SeeAlso: AX=0104h
  1649. --------N-2F0200-----------------------------
  1650. INT 2F U - PC LAN PROGRAM REDIR/REDIRIFS internal - INSTALLATION CHECK
  1651.     AX = 0200h
  1652. Return: AL = FFh if installed
  1653. Desc:    determine whether the PC LAN Program redirector is installed
  1654. SeeAlso: AX=0201h,AX=0203h
  1655. --------N-2F0201-----------------------------
  1656. INT 2F U - PC LAN PROGRAM REDIR/REDIRIFS internal - ???
  1657.     AX = 0201h
  1658. Return: nothing???
  1659. Notes:    called by DOS 3.3+ PRINT.COM
  1660.     AX=0202h appears to be the opposite function
  1661.     these functions are supposedly used to signal opening and closing of
  1662.       printers
  1663. SeeAlso: AX=0202h
  1664. --------N-2F0202-----------------------------
  1665. INT 2F U - PC LAN PROGRAM REDIR/REDIRIFS internal - ???
  1666.     AX = 0202h
  1667.     ???
  1668. Return: nothing???
  1669. Notes:    called by DOS 3.3+ PRINT.COM
  1670.     these functions are supposedly used to signal opening and closing of
  1671.       printers
  1672. SeeAlso: AX=0201h
  1673. --------N-2F0203-----------------------------
  1674. INT 2F U - PC LAN PROGRAM REDIR/REDIRIFS internal - ???
  1675.     AX = 0203h
  1676. Return: nothing???
  1677. Notes:    called by DOS 3.3+ PRINT.COM
  1678.     AX=0204h appears to be the opposite function
  1679.     these functions are supposedly used to signal opening and closing of
  1680.       printers
  1681. SeeAlso: AX=0200h,AX=0204h
  1682. --------N-2F0204-----------------------------
  1683. INT 2F U - PC LAN PROGRAM REDIR/REDIRIFS internal - ???
  1684.     AX = 0204h
  1685.     ???
  1686. Return: nothing???
  1687. Notes:    called by DOS 3.3 PRINT.COM
  1688.     these functions are supposedly used to signal opening and closing of
  1689.       printers
  1690. SeeAlso: AX=0200h,AX=0203h
  1691. --------l-2F0500-----------------------------
  1692. INT 2F U - DOS 3+ CRITICAL ERROR HANDLER - INSTALLATION CHECK
  1693.     AX = 0500h
  1694. Return: AL = 00h not installed, OK to install
  1695.          01h not installed, can't install
  1696.          FFh installed
  1697. Desc:    determine whether a critical error message override is installed
  1698. Note:    this set of functions allows a user program to partially or completely
  1699.       override the default critical error handler's message in COMMAND.COM
  1700. SeeAlso: AH=05h,INT 24
  1701. --------l-2F05-------------------------------
  1702. INT 2F CU - DOS 3+ CRITICAL ERROR HANDLER - EXPAND ERROR INTO STRING
  1703.     AH = 05h
  1704. ---DOS 3.x---
  1705.     AL = extended error code (not zero)
  1706. ---DOS 4+ ---
  1707.     AL = error type
  1708.         01h DOS extended error code
  1709.         02h parameter error
  1710.     BX = error code
  1711. Return: CF clear if successful
  1712.         ES:DI -> ASCIZ error message (read-only)
  1713.         AL = completion state
  1714.         00h message requires completion with device name, drive, etc.
  1715.         01h message is complete as returned
  1716.     CF set if error code can't be converted to string
  1717.         AX,DI,ES destroyed
  1718.     other flags corrupted
  1719. Notes:    called at start of COMMAND.COM's default critical error handler if
  1720.       installed by a user program, allowing partial or complete overriding
  1721.       of the default error messages
  1722.     subfunction 02h is called by many DOS 4 external programs
  1723.     DR-DOS's COMMAND.COM appends additional info ("0 files copied") to the
  1724.       returned string
  1725. SeeAlso: AX=0500h,AX=122Eh,INT 24
  1726. --------U-2F0600-----------------------------
  1727. INT 2F - DOS 3+ ASSIGN - INSTALLATION CHECK
  1728.     AX = 0600h
  1729. Return: AL = status
  1730.         00h not installed
  1731.         01h not installed, but not OK to install
  1732.         FFh installed
  1733. Notes:    ASSIGN is not a TSR in DR-DOS 5.0; it is internally replaced by SUBST
  1734.       (see INT 21/AH=52h)
  1735.     undocumented prior to the release of DOS 5.0
  1736. SeeAlso: AX=0601h,INT 21/AH=52h
  1737. --------U-2F0601-----------------------------
  1738. INT 2F U - DOS 3+ ASSIGN - GET DRIVE ASSIGNMENT TABLE
  1739.     AX = 0601h
  1740. Return: ES = segment of ASSIGN work area and assignment table
  1741. Note:    under DOS 3+, the 26 bytes starting at ES:0103h specify which drive
  1742.       each of A: to Z: is mapped to.  Initially set to 01h 02h 03h....
  1743. SeeAlso: AX=0600h
  1744. --------D-2F0800-----------------------------
  1745. INT 2F U - DRIVER.SYS support - INSTALLATION CHECK
  1746.     AX = 0800h
  1747. Return: AL = 00h not installed, OK to install
  1748.          01h not installed, not OK to install
  1749.          FFh installed
  1750. Desc:    determine whether the internal support code used by DRIVER.SYS is
  1751.       present
  1752. Note:    supported by DR-DOS 5.0
  1753. --------D-2F0801-----------------------------
  1754. INT 2F U - DRIVER.SYS support - ADD NEW BLOCK DEVICE
  1755.     AX = 0801h
  1756.     DS:DI -> drive data table (see AX=0803h)
  1757. Return: AX,BX,SI,ES destroyed
  1758. Notes:    moves down internal list of drive data tables, copying and modifying
  1759.       the drive description flags word for tables referencing same physical
  1760.       drive
  1761.     the data table is appended to the chain of tables
  1762.     supported by DR-DOS 5.0
  1763. SeeAlso: AX=0803h
  1764. --------D-2F0802-----------------------------
  1765. INT 2F U - DRIVER.SYS support - EXECUTE DEVICE DRIVER REQUEST
  1766.     AX = 0802h
  1767.     ES:BX -> device driver request header (see below)
  1768. Return: request header updated as per requested operation
  1769. Notes:    supported by DR-DOS 5.0
  1770.     DOS 3.2 executes this function on any AL value from 02h through F7h;
  1771.       DOS 4+ executes this function on AL=02h and AL=04h-F7h
  1772.     the command codes and structures described below apply to all drivers
  1773.       which support the appropriate commands; this call is just one of a
  1774.       number of ways in which a device driver request may be invoked
  1775. SeeAlso: AX=0800h,AX=0801h,AX=0803h,INT 21/AH=52h,INT 21/AH=99h,INT 21/AH=9Ah
  1776.  
  1777. Values for command code:
  1778.  00h    INIT
  1779.  01h    MEDIA CHECK (block devices)
  1780.  02h    BUILD BPB (block devices)
  1781.  03h    IOCTL INPUT
  1782.  04h    INPUT
  1783.  05h    NONDESTRUCTIVE INPUT, NO WAIT (character devices)
  1784.  06h    INPUT STATUS (character devices)
  1785.  07h    INPUT FLUSH (character devices)
  1786.  08h    OUTPUT
  1787.  09h    OUTPUT WITH VERIFY
  1788.  0Ah    OUTPUT STATUS (character devices)
  1789.  0Bh    OUTPUT FLUSH (character devices)
  1790.  0Ch    IOCTL OUTPUT
  1791.  0Dh    (DOS 3+) DEVICE OPEN
  1792.  0Eh    (DOS 3+) DEVICE CLOSE
  1793.  0Fh    (DOS 3+) REMOVABLE MEDIA (block devices)
  1794.  10h    (DOS 3+) OUTPUT UNTIL BUSY (character devices)
  1795.  11h    (European MS-DOS 4.0) STOP OUTPUT (console screen drivers only)
  1796.  12h    (European MS-DOS 4.0) RESTART OUTPUT (console screen drivers only)
  1797.  13h    (DOS 3.2+) GENERIC IOCTL
  1798.  14h    unused
  1799.  15h    (European MS-DOS 4.0) RESET UNCERTAIN MEDIA FLAG
  1800.  16h    unused
  1801.  17h    (DOS 3.2+) GET LOGICAL DEVICE
  1802.  18h    (DOS 3.2+) SET LOGICAL DEVICE
  1803.  19h    (DOS 5+) CHECK GENERIC IOCTL SUPPORT
  1804.  80h    (CD-ROM) READ LONG
  1805.  81h    (CD-ROM) reserved
  1806.  82h    (CD-ROM) READ LONG PREFETCH
  1807.  83h    (CD-ROM) SEEK
  1808.  84h    (CD-ROM) PLAY AUDIO
  1809.  85h    (CD-ROM) STOP AUDIO
  1810.  86h    (CD-ROM) WRITE LONG
  1811.  87h    (CD-ROM) WRITE LONG VERIFY
  1812.  88h    (CD-ROM) RESUME AUDIO
  1813.  
  1814. Format of device driver request header:
  1815. Offset    Size    Description
  1816.  00h    BYTE    length of request header
  1817.  01h    BYTE    subunit within device driver
  1818.  02h    BYTE    command code (see above)
  1819.  03h    WORD    status (filled in by device driver)
  1820.         bit 15: error
  1821.         bits 14-11: reserved
  1822.         bit 10: ??? set by DOS kernel on entry to some driver calls
  1823.         bit 9: busy
  1824.         bit 8: done (may be clear on return under European MS-DOS 4.0)
  1825.         bits 7-0: error code if bit 15 set (see below)
  1826. ---DOS---
  1827.  05h  4 BYTEs    reserved (unused in DOS 2.x and 3.x)
  1828.  09h    DWORD    (European MS-DOS 4.0 only) pointer to next request header in
  1829.             device's request queue
  1830.         (other versions) reserved (unused in DOS 2.x and 3.x)
  1831. ---STARLITE architecture---
  1832.  05h    DWORD    pointer to next request header
  1833.  09h  4 BYTEs    reserved
  1834. ---command code 00h---
  1835.  0Dh    BYTE    (return) number of units
  1836.  0Eh    DWORD    (call) pointer to DOS device helper function (see below)
  1837.             (European MS-DOS 4.0 only)
  1838.         (call) pointer past end of memory available to driver (DOS 5+)
  1839.         (return) address of first free byte following driver
  1840.  12h    DWORD    (call) pointer to commandline arguments
  1841.         (return) pointer to BPB array (block drivers) or
  1842.                 0000h:0000h (character drivers)
  1843.  16h    BYTE    (DOS 3+) drive number for first unit of block driver (0=A)
  1844.    ---European MS-DOS 4.0---
  1845.  17h    DWORD    pointer to function to save registers on stack
  1846.    ---DOS 5+ ---
  1847.  17h    WORD    (return) error-message flag
  1848.             0001h MS-DOS should display error msg on init failure
  1849. ---command code 01h---
  1850.  0Dh    BYTE    media descriptor
  1851.  0Eh    BYTE    returned status
  1852.         00h don't know
  1853.         01h media has not changed
  1854.         FFh media has been changed
  1855.  0Fh    DWORD    (return, DOS 3+) pointer to previous volume ID if OPEN/CLOSE/RM
  1856.           bit in device header is set and disk changed
  1857. ---command code 02h---
  1858.  0Dh    BYTE    media descriptor
  1859.  0Eh    DWORD    transfer address
  1860.         -> scratch sector if NON-IBM FORMAT bit in device header set
  1861.         -> first FAT sector otherwise
  1862.  12h    DWORD    pointer to BPB (set by driver) (see INT 21/AH=53h)
  1863. ---command codes 03h,0Ch--- (see also INT 21/AX=4402h,INT 21/AX=4403h)
  1864.  0Dh    BYTE    media descriptor (block devices only)
  1865.  0Eh    DWORD    transfer address
  1866.  12h    WORD    (call) number of bytes to read/write
  1867.         (return) actual number of bytes read or written
  1868. ---command codes 04h,08h,09h---
  1869.  0Dh    BYTE    media descriptor (block devices only)
  1870.  0Eh    DWORD    transfer address
  1871.  12h    WORD    byte count (character devices) or sector count (block devices)
  1872.  14h    WORD    starting sector number (block devices only)
  1873.  16h    DWORD    (DOS 3+) pointer to volume ID if error 0Fh returned
  1874.  1Ah    DWORD    (DOS 4+) 32-bit starting sector number (block devices with
  1875.         device attribute word bit 1 set only) if starting sector number
  1876.         above is FFFFh (see INT 21/AH=52h)
  1877. ---command code 05h---
  1878.  0Dh    BYTE    byte read from device if BUSY bit clear on return
  1879. ---command codes 06h,07h,0Ah,0Bh,0Dh,0Eh,0Fh---
  1880.  no further fields
  1881. ---command code 10h---
  1882.  0Dh    BYTE    unused
  1883.  0Eh    DWORD    transfer address
  1884.  12h    WORD    (call) number of bytes to write
  1885.         (return) actual number of bytes written
  1886. ---command codes 11h,12h---
  1887.  0Dh    BYTE    reserved
  1888. ---command code 15h---
  1889.  no further fields
  1890. ---command codes 13h,19h---
  1891.  0Dh    BYTE    category code
  1892.         00h unknown
  1893.         01h COMn:
  1894.         03h CON
  1895.         05h LPTn:
  1896.         07h mouse (European MS-DOS 4.0)
  1897.         08h disk
  1898.         9Eh (STARLITE) Media Access Control driver
  1899.  0Eh    BYTE    function code
  1900.         00h (STARLITE) MAC Bind request
  1901.  0Fh    WORD    copy of DS at time of IOCTL call (apparently unused in DOS 3.3)
  1902.         SI contents (European MS-DOS 4.0)
  1903.  11h    WORD    offset of device driver header
  1904.         DI contents (European MS-DOS 4.0)
  1905.  13h    DWORD    pointer to parameter block from INT 21/AX=440Ch or AX=440Dh
  1906. ---command codes 80h,82h---
  1907.  0Dh    BYTE    addressing mode
  1908.         00h HSG (default)
  1909.         01h Phillips/Sony Red Book
  1910.  0Eh    DWORD    transfer address (ignored for command 82h)
  1911.  12h    WORD    number of sectors to read
  1912.         (if 0 for command 82h, request is an advisory seek)
  1913.  14h    DWORD    starting sector number
  1914.         logical sector number in HSG mode
  1915.         frame/second/minute/unused in Red Book mode
  1916.         (HSG sector = minute * 4500 + second * 75 + frame - 150)
  1917.  18h    BYTE    data read mode
  1918.         00h cooked (2048 bytes per frame)
  1919.         01h raw (2352 bytes per frame, including EDC/ECC)
  1920.  19h    BYTE    interleave size (number of sectors stored consecutively)
  1921.  1Ah    BYTE    interleave skip factor (# sectors between consec portions)
  1922. ---command code 83h---
  1923.  0Dh    BYTE    addressing mode (see above)
  1924.  0Eh    DWORD    transfer address (ignored)
  1925.  12h    WORD    number of sectors to read (ignored)
  1926.  14h    DWORD    starting sector number (see also above)
  1927. ---command code 84h---
  1928.  0Dh    BYTE    addressing mode (see above)
  1929.  0Eh    DWORD    starting sector number (see also above)
  1930.  12h    DWORD    number of sectors to play
  1931. ---command codes 85h,88h---
  1932.  no further fields
  1933. ---command codes 86h,87h---
  1934.  0Dh    BYTE    addressing mode (see above)
  1935.  0Eh    DWORD    transfer address (ignored in write mode 0)
  1936.  12h    WORD    number of sectors to write
  1937.  14h    DWORD    starting sector number (see also above)
  1938.  18h    BYTE    write mode
  1939.         00h mode 0 (write all zeros)
  1940.         01h mode 1 (default) (2048 bytes per sector)
  1941.         02h mode 2 form 1 (2048 bytes per sector)
  1942.         03h mode 2 form 2 (2336 bytes per sector)
  1943.  19h    BYTE    interleave size (number of sectors stored consecutively)
  1944.  1Ah    BYTE    interleave skip factor (# sectors between consec portions)
  1945.  
  1946. Values for error code:
  1947.  00h    write-protect violation
  1948.  01h    unknown unit
  1949.  02h    drive not ready
  1950.  03h    unknown command
  1951.  04h    CRC error
  1952.  05h    bad drive request structure length
  1953.  06h    seek error
  1954.  07h    unknown media
  1955.  08h    sector not found
  1956.  09h    printer out of paper
  1957.  0Ah    write fault
  1958.  0Bh    read fault
  1959.  0Ch    general failure
  1960.  0Dh    reserved
  1961.  0Eh    (CD-ROM) media unavailable
  1962.  0Fh    invalid disk change
  1963.  
  1964. Call European MS-DOS 4.0 device helper function with:
  1965.     DL = function
  1966.         00h "SchedClock" called on each timer tick
  1967.         AL = tick interval in milliseconds
  1968.         01h "DevDone" device I/O complete
  1969.         ES:BX -> request header
  1970.         Note:    must update status word first; may be called from
  1971.               an interrupt handler
  1972.         02h "PullRequest" pull next request from queue
  1973.         DS:SI -> DWORD pointer to start of device's request queue
  1974.         Return: ZF clear if pending request
  1975.                 ES:BX -> request header
  1976.             ZF set if no more requests
  1977.         03h "PullParticular" remove specific request from queue
  1978.         DS:SI -> DWORD pointer to start of device's request queue
  1979.         ES:BX -> request header
  1980.         Return: ZF set if request header not found
  1981.         04h "PushRequest" push the request onto the queue
  1982.         DS:SI -> DWORD pointer to start of device's request queue
  1983.         ES:BX -> request header
  1984.         interrupts disabled
  1985.         05h "ConsInputFilter" keyboard input check
  1986.         AX = character (high byte 00h if PC ASCII character)
  1987.         Return: ZF set if character should be discarded
  1988.             ZF clear if character should be handled normally
  1989.         Note:    called by keyboard interrupt handler so DOS can scan
  1990.               for special input characters
  1991.         06h "SortRequest" push request in sorted order by starting sector
  1992.         DS:SI -> DWORD pointer to start of device's request queue
  1993.         ES:BX -> request header
  1994.         interrupts disabled
  1995.         07h "SigEvent" send signal on keyboard event
  1996.         AH = event identifier
  1997.         Return: AL,FLAGS destroyed
  1998.         09h "ProcBlock" block on event
  1999.         AX:BX = event identifier (typically a pointer)
  2000.         CX = timeout in ms or 0000h for never
  2001.         DH = interruptible flag (nonzero if pause may be interrupted)
  2002.         interrupts disabled
  2003.         Return: after corresponding ProcRun call
  2004.             CF clear if event wakeup, set if unusual wakeup
  2005.             ZF set if timeout wakeup, clear if interrupted
  2006.             AL = wakeup code, nonzero if unusual wakeup
  2007.             interrupts enabled
  2008.             BX,CX,DX destroyed
  2009.         Note:    block process and schedules another to run
  2010.         0Ah "ProcRun" unblock process
  2011.         AX:BX = event identifier (typically a pointer)
  2012.         Return: AX = number of processes awakened
  2013.             ZF set if no processes awakened
  2014.             BX,CX,DX destroyed
  2015.         0Bh "QueueInit" initialize/clear character queue
  2016.         DS:BX -> character queue structure (see below)
  2017.         Note:    the queue size field must be set before calling
  2018.         0Dh "QueueWrite" put a character in the queue
  2019.         DS:BX -> character queue (see below)
  2020.         AL = character to append to end of queue
  2021.         Return: ZF set if queue is full
  2022.             ZF clear if character stored
  2023.         0Eh "QueueRead" get a character from the queue
  2024.         DS:BX -> character queue (see below)
  2025.         Return: ZF set if queue is empty
  2026.             ZF clear if characters in queue
  2027.                 AL = first character in queue
  2028.         10h "GetDOSVar" return pointer to DOS variable
  2029.         AL = index of variable
  2030.             03h current process ID
  2031.         BX = index into variable if AL specifies an array
  2032.         CX = expected length of variable
  2033.         Return: CF clear if successful
  2034.                 DX:AX -> variable
  2035.             CF set on error
  2036.                 AX,DX destroyed
  2037.             BX,CX destroyed
  2038.         Note:    the variables may not be modified
  2039.         14h "Yield" yield CPU if higher-priority task ready to run
  2040.         Return: FLAGS destroyed
  2041.         1Bh "CritEnter" begin system critical section
  2042.         DS:BX -> semaphore (6 BYTEs, initialized to zero)
  2043.         Return: AX,BX,CX,DX destroyed
  2044.         1Ch "CritLeave" end system critical section
  2045.         DS:BX -> semaphore (6 BYTEs, initialized to zero)
  2046.         Return: AX,BX,CX,DX destroyed
  2047.         Note:    must be called in the context of the process which
  2048.               called CritEnter on the semaphore
  2049. Note:    the DWORD pointing at the request queue must be allocated by the driver
  2050.       and initialized to 0000h:0000h.  It always points at the next request
  2051.       to be executed
  2052.  
  2053. Format of character queue:
  2054. Offset    Size    Description
  2055.  00h    WORD    size of queue in bytes
  2056.  02h    WORD    index of next character out
  2057.  04h    WORD    count of characters in the queue
  2058.  06h  N BYTEs    queue buffer
  2059. --------D-2F0803-----------------------------
  2060. INT 2F U - DOS 4+ DRIVER.SYS support - GET DRIVE DATA TABLE LIST
  2061.     AX = 0803h
  2062. Return: DS:DI -> first drive data table in list
  2063. Note:    not available under DR-DOS 5.0
  2064. SeeAlso: AX=0801h
  2065.  
  2066. Format of DOS 3.30 drive data table:
  2067. Offset    Size    Description
  2068.  00h    DWORD    pointer to next table (offset FFFFh if last table)
  2069.  04h    BYTE    physical unit number (for INT 13)
  2070.  05h    BYTE    logical drive number (0=A:)
  2071.  06h 19 BYTEs    BIOS Parameter Block (see also INT 21/AH=53h)
  2072.         Offset    Size    Description
  2073.          00h    WORD    bytes per sector
  2074.          02h    BYTE    sectors per cluster, FFh if unknown
  2075.          03h    WORD    number of reserved sectors
  2076.          05h    BYTE    number of FATs
  2077.          06h    WORD    number of root dir entries
  2078.          08h    WORD    total sectors
  2079.          0Ah    BYTE    media descriptor, 00h if unknown
  2080.          0Bh    WORD    sectors per FAT
  2081.          0Dh    WORD    sectors per track
  2082.          0Fh    WORD    number of heads
  2083.          11h    WORD    number of hidden sectors
  2084.  19h    BYTE    flags
  2085.         bit 6: 16-bit FAT instead of 12-bit FAT
  2086.  1Ah    WORD    number of DEVICE OPEN calls without corresponding DEVICE CLOSE
  2087.  1Ch 11 BYTEs    volume label or "NO NAME    " if none (always "NO NAME" for
  2088.         fixed media)
  2089.  27h    BYTE    terminating null for volume label???
  2090.  28h    BYTE    device type (see INT 21/AX=440Dh)
  2091.  29h    WORD    bit flags describing drive (see below)
  2092.  2Bh    WORD    number of cylinders
  2093.  2Dh 19 BYTEs    BIOS Parameter Block for highest capacity supported
  2094.  40h  3 BYTEs    ???
  2095.  43h  9 BYTEs    filesystem type???, default = "NO NAME    "
  2096.         (apparently only MS-DOS 3.30 fixed media, nulls for removable
  2097.         media and PC-DOS 3.30)
  2098.  4Ch    BYTE    least-significant byte of last-accessed cylinder number
  2099. ---removable media---
  2100.  4Dh    DWORD    time of last access in clock ticks (FFFFFFFFh if never)
  2101. ---fixed media---
  2102.  4Dh    WORD    partition (FFFFh = primary, 0001h = extended)
  2103.  4Fh    WORD    absolute cylinder number of partition's start on physical
  2104.         drive (always FFFFh if primary partition)
  2105.  
  2106. Format of COMPAQ DOS 3.31 drive data table:
  2107. Offset    Size    Description
  2108.  00h    DWORD    pointer to next table (offset FFFFh if last table)
  2109.  04h    BYTE    physical unit number (for INT 13)
  2110.  05h    BYTE    logical drive number (0=A:)
  2111.  06h 25 BYTEs    BIOS Parameter Block (see DOS 4.0-6.0 drive data table below)
  2112.  1Fh  6 BYTEs    reserved fields from BPB above???
  2113.  25h    BYTE    flags
  2114.         bit 6: 16-bit FAT instead of 12-bit FAT
  2115.         bit 5: large volume???
  2116.  26h    WORD    device-open count???
  2117.  28h 11 BYTEs    volume label or "NO NAME    " if none (always "NO NAME" for
  2118.         fixed media)
  2119.  33h    BYTE    terminating null for volume label
  2120.  34h    BYTE    device type (see INT 21/AX=440Dh)
  2121.  35h    WORD    bit flags describing drive (see below)
  2122.  37h    WORD    number of cylinders
  2123.  39h 25 BYTEs    BIOS parameter block for highest capacity drive supports
  2124.  52h  6 BYTEs    ??? apparently always zeros
  2125.  58h    BYTE    least-significant byte of last-accessed cylinder number
  2126. ---removable media---
  2127.  59h    DWORD    time of last access in clock ticks (FFFFFFFFh if never)
  2128. ---fixed media---
  2129.  59h    WORD    partition (FFFFh = primary, 0001h = extended)
  2130.  5Bh    WORD    absolute cylinder number of partition's start on physical
  2131.         drive (always FFFFh if primary partition)
  2132.  
  2133. Format of DOS 4.0-6.0 drive data table:
  2134. Offset    Size    Description
  2135.  00h    DWORD    pointer to next table (offset FFFFh if last table)
  2136.  04h    BYTE    physical unit number (for INT 13)
  2137.  05h    BYTE    logical drive number (0=A:)
  2138.  06h 25 BYTEs    BIOS Parameter Block (see also INT 21/AH=53h)
  2139.         Offset    Size    Description
  2140.          00h    WORD    bytes per sector
  2141.          02h    BYTE    sectors per cluster, FFh if unknown
  2142.          03h    WORD    number of reserved sectors
  2143.          05h    BYTE    number of FATs
  2144.          06h    WORD    number of root dir entries
  2145.          08h    WORD    total sectors (see offset 15h if zero)
  2146.          0Ah    BYTE    media descriptor, 00h if unknown
  2147.          0Bh    WORD    sectors per FAT
  2148.          0Dh    WORD    sectors per track
  2149.          0Fh    WORD    number of heads
  2150.          11h    DWORD    number of hidden sectors
  2151.          15h    DWORD    total sectors if WORD at 08h is zero
  2152.  1Fh    BYTE    flags
  2153.         bit 6: 16-bit FAT instead of 12-bit
  2154.         bit 7: unsupportable disk (all accesses will return Not Ready)
  2155.  20h    WORD    device-open count
  2156.  22h    BYTE    device type (see INT 21/AX=440Dh)
  2157.  23h    WORD    bit flags describing drive (see below)
  2158.  25h    WORD    number of cylinders
  2159.  27h 25 BYTEs    BIOS Parameter Block for default (highest) capacity supported
  2160.  40h  6 BYTEs    reserved (part of BPB above)
  2161.  46h    BYTE    last track accessed
  2162. ---removable media---
  2163.  47h    DWORD    time of last access in clock ticks (FFFFFFFFh if never)
  2164. ---fixed media---
  2165.  47h    WORD    partition (FFFFh = primary, 0001h = extended)
  2166.         always 0001h for DOS 5+
  2167.  49h    WORD    absolute cylinder number of partition's start on physical drive
  2168.         (FFFFh if primary partition in DOS 4.x)
  2169. ------
  2170.  4Bh 11 BYTEs    volume label or "NO NAME    " if none (apparently taken from
  2171.         extended boot record rather than root directory)
  2172.  56h    BYTE    terminating null for volume label
  2173.  57h    DWORD    serial number
  2174.  5Bh  8 BYTEs    filesystem type ("FAT12      " or "FAT16    ")
  2175.  63h    BYTE    terminating null for filesystem type
  2176.  
  2177. Bitfields for flags describing drive:
  2178.  bit 0    fixed media
  2179.  bit 1    door lock ("changeline") supported
  2180.  bit 2    current BPB locked
  2181.  bit 3    all sectors in a track are the same size
  2182.  bit 4    physical drive has multiple logical units
  2183.  bit 5    current logical drive for physical drive
  2184.  bit 6    disk change detected
  2185.  bit 7    set DASD before formatting
  2186.  bit 8    disk reformatted
  2187.  bit 9    unformatted (fixed media only, disables reads and writes)
  2188. --------f-2F1000-----------------------------
  2189. INT 2F - SHARE - INSTALLATION CHECK
  2190.     AX = 1000h
  2191. Return: AL = 00h  not installed, OK to install
  2192.          01h  not installed, not OK to install
  2193.          FFh  installed
  2194. BUGS:    values of AL other than 00h put DOS 3.x SHARE into an infinite loop
  2195.       (08E9: OR  AL,AL
  2196.        08EB: JNZ 08EB) <- the buggy instruction (DOS 3.3)
  2197.     values of AL other than described here put PC-DOS 4.00 into the same
  2198.       loop (the buggy instructions are the same)
  2199. Notes:    supported by OS/2 v1.3+ compatibility box, which always returns AL=FFh
  2200.     if DOS 4.01 SHARE was automatically loaded, file sharing is in an
  2201.       inactive state (due to the undocumented /NC flag used by the autoload
  2202.       code) until this call is made
  2203.     DOS 5+ chains to the previous handler if AL <> 00h on entry
  2204.     Windows Enhanced mode hooks this call and reports that SHARE is
  2205.       installed even when it is not
  2206. SeeAlso: AX=1080h,INT 21/AH=52h
  2207. --------d-2F1001-----------------------------
  2208. INT 2F U - SuperStor PRO SSTORDRV.SYS - SET ???
  2209.     AX = 1001h
  2210.     BX = ???
  2211.     DX = ???
  2212. Program: SuperStor is a disk-compression program by Addstor.
  2213. SeeAlso: AX=F800h
  2214. --------f-2F1040-----------------------------
  2215. INT 2F U - DOS 4 only SHARE internal - ???
  2216.     AX = 1040h
  2217.     ???
  2218. Return: AL = FFh???
  2219. SeeAlso: AX=1000h
  2220. --------f-2F1080-----------------------------
  2221. INT 2F U - DOS 4 only SHARE internal - TURN ON FILE SHARING CHECKS
  2222.     AX = 1080h
  2223. Return: AL = status
  2224.         F0h successful
  2225.         FFh checking was already on
  2226. Note:    DOS 4.x SHARE has dual functions: FCB support for large (>32M) media
  2227.       and file sharing checks.  The undocumented commandline flag /NC can
  2228.       be used to disable the sharing code.
  2229. SeeAlso: AX=1000h,AX=1081h
  2230. --------f-2F1081-----------------------------
  2231. INT 2F U - DOS 4 only SHARE internal - TURN OFF FILE SHARING CHECKS
  2232.     AX = 1081h
  2233. Return: AL = status
  2234.         F0h successful
  2235.         FFh checking was already off
  2236. Note:    (see AX=1080h)
  2237. SeeAlso: AX=1000h,AX=1080h
  2238. --------O-2F10FF-----------------------------
  2239. INT 2F U - Multiplex - DR-DOS 5.0 - ???
  2240.     AX = 10FFh
  2241.     ES:BX -> ???
  2242. Note:    sets pointer in kernel
  2243. --------N-2F1100-----------------------------
  2244. INT 2F C - NETWORK REDIRECTOR - INSTALLATION CHECK
  2245.     AX = 1100h
  2246. Return: AL = status
  2247.         00h not installed, OK to install
  2248.         01h not installed, not OK to install
  2249.         FFh installed
  2250.         AH = product identifier (ad hoc by various manufacturers)
  2251.             00h if PC Tools v8 DRIVEMAP
  2252.             42h ('B') for Beame&Whiteside BWNFS v3.0a
  2253.             6Eh ('n') for NetWare Lite v1.1 CLIENT
  2254. Notes:    called by DOS 3.1+ kernel
  2255.     in DOS 4.x only, the 11xx calls are all in IFSFUNC.EXE, not in the
  2256.       PC LAN Program redirector; DOS 5+ moves the calls back into the
  2257.       redirector
  2258.     the PC Network 1.00 redirector (renamed to PC LAN Program in 1.1-1.3)
  2259.       only supports AL=00h-27h
  2260. --------d-2F1100-----------------------------
  2261. INT 2F - MSCDEX (MS CD-ROM Extensions) - INSTALLATION CHECK
  2262.     AX = 1100h
  2263.     STACK: WORD DADAh
  2264. Return: AL = status
  2265.         00h not installed, OK to install
  2266.         STACK unchanged
  2267.         01h not installed, not OK to install
  2268.         STACK unchanged
  2269.         FFh installed
  2270.         STACK: WORD ADADh
  2271. --------N-2F1101-----------------------------
  2272. INT 2F CU - NETWORK REDIRECTOR - REMOVE REMOTE DIRECTORY
  2273.     AX = 1101h
  2274.     SS = DOS DS
  2275.     SDA first filename pointer -> fully-qualified directory name
  2276.     SDA CDS pointer -> current directory structure for drive with dir
  2277. Return: CF set on error
  2278.         AX = DOS error code (see INT 21/AH=59h)
  2279.     CF clear if successful
  2280. Note:    called by DOS 3.1+ kernel
  2281. SeeAlso: AX=1103h,AX=1105h,INT 21/AH=3Ah,INT 21/AH=60h
  2282. --------N-2F1102-----------------------------
  2283. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - REMOVE REMOTE DIRECTORY
  2284.     AX = 1102h
  2285.     SS = DOS DS
  2286.     SDA first filename pointer -> fully-qualified directory name
  2287.     SDA CDS pointer -> current directory structure for drive with dir
  2288. Return: CF set on error
  2289.         AX = DOS error code (see INT 21/AH=59h)
  2290.     CF clear if successful
  2291. Note:    appears to be identical to AX=1101h; MS internal documentation calls
  2292.       this function "SEQ_RMDIR"
  2293. SeeAlso: AX=1101h
  2294. --------N-2F1103-----------------------------
  2295. INT 2F CU - NETWORK REDIRECTOR - MAKE REMOTE DIRECTORY
  2296.     AX = 1103h
  2297.     SS = DOS DS
  2298.     SDA first filename pointer -> fully-qualified directory name
  2299.     SDA CDS pointer -> current directory structure for drive with dir
  2300. Return: CF set on error
  2301.         AX = DOS error code (see INT 21/AH=59h)
  2302.     CF clear if successful
  2303. Note:    called by DOS 3.1+ kernel
  2304. SeeAlso: AX=1101h,AX=1105h,INT 21/AH=39h,INT 21/AH=60h
  2305. --------N-2F1104-----------------------------
  2306. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - MAKE REMOTE DIRECTORY
  2307.     AX = 1104h
  2308.     SS = DOS DS
  2309.     SDA first filename pointer -> fully-qualified directory name
  2310.     SDA CDS pointer -> current directory structure for drive with dir
  2311. Return: CF set on error
  2312.         AX = DOS error code (see INT 21/AH=59h)
  2313.     CF clear if successful
  2314. Note:    appears to be identical to AX=1103h
  2315. SeeAlso: AX=1103h
  2316. --------N-2F1105-----------------------------
  2317. INT 2F CU - NETWORK REDIRECTOR - CHDIR
  2318.     AX = 1105h
  2319.     SS = DOS DS
  2320.     SDA first filename pointer -> fully-qualified directory name
  2321.     SS:BX -> fully-qualified directory name
  2322.     SDA CDS pointer -> current directory structure for drive with dir
  2323. Return: CF set on error
  2324.         AX = DOS error code (see INT 21/AH=59h)
  2325.     CF clear if successful
  2326.         CDS updated with new path
  2327. Notes:    called by DOS 3.1+ kernel
  2328.     directory string in CDS should not have a terminating backslash unless
  2329.       the current directory is the root
  2330. SeeAlso: AX=1101h,AX=1103h,INT 21/AH=3Bh,INT 21/AH=60h
  2331. --------N-2F1106-----------------------------
  2332. INT 2F CU - NETWORK REDIRECTOR - CLOSE REMOTE FILE
  2333.     AX = 1106h
  2334.     BX = device info word from SFT
  2335.     ES:DI -> SFT
  2336.         SFT DPB field -> DPB of drive containing file
  2337. Return: CF set on error
  2338.         AX = DOS error code (see INT 21/AH=59h)
  2339.     CF clear if successful
  2340.         SFT updated (redirector must decrement open count, which may be
  2341.             done with INT 2F/AX=1208h)
  2342. Note:    called by DOS 3.1+ kernel
  2343. SeeAlso: AX=1116h,AX=1201h,AX=1208h,AX=1227h,INT 21/AH=3Eh
  2344. --------N-2F1107-----------------------------
  2345. INT 2F CU - NETWORK REDIRECTOR - COMMIT REMOTE FILE
  2346.     AX = 1107h
  2347.     ES:DI -> SFT
  2348.         SFT DPB field -> DPB of drive containing file
  2349. Return: CF set on error
  2350.         AX = DOS error code (see INT 21/AH=59h)
  2351.     CF clear if successful
  2352.         all buffers for file flushed
  2353.         directory entry updated
  2354. Note:    called by DOS 3.1+ kernel
  2355. SeeAlso: INT 21/AH=68h,INT 21/AX=5D01h
  2356. --------N-2F1108-----------------------------
  2357. INT 2F CU - NETWORK REDIRECTOR - READ FROM REMOTE FILE
  2358.     AX = 1108h
  2359.     ES:DI -> SFT
  2360.         SFT DPB field -> DPB of drive containing file
  2361.     CX = number of bytes
  2362.     SS = DOS DS
  2363.     SDA DTA field -> user buffer
  2364. Return: CF set on error
  2365.         AX = DOS error code (see INT 21/AH=59h)
  2366.     CF clear if successful
  2367.         CX = number of bytes read (0000h = end of file)
  2368.         SFT updated
  2369. Note:    called by DOS 3.1+ kernel
  2370. SeeAlso: AX=1109h,AX=1229h,INT 21/AH=3Fh,INT 21/AX=5D06h
  2371. --------N-2F1109-----------------------------
  2372. INT 2F CU - NETWORK REDIRECTOR - WRITE TO REMOTE FILE
  2373.     AX = 1109h
  2374.     ES:DI -> SFT
  2375.         SFT DPB field -> DPB of drive containing file
  2376.     CX = number of bytes
  2377.     SS = DOS DS
  2378.     SDA DTA field -> user buffer
  2379. Return: CF set on error
  2380.         AX = DOS error code (see INT 21/AH=59h)
  2381.     CF clear if successful
  2382.         CX = number of bytes written
  2383.         SFT updated
  2384. Note:    called by DOS 3.1+ kernel
  2385. SeeAlso: AX=1107h,AX=1108h,INT 21/AH=40h,INT 21/AX=5D06h
  2386. --------N-2F110A-----------------------------
  2387. INT 2F CU - NETWORK REDIRECTOR (DOS 3.x only) - LOCK REGION OF FILE
  2388.     AX = 110Ah
  2389.     BX = file handle
  2390.     CX:DX = starting offset
  2391.     SI = high word of size
  2392.     STACK: WORD low word of size
  2393.     ES:DI -> SFT
  2394.         SFT DPB field -> DPB of drive containing file
  2395.     SS = DOS DS
  2396. Return: CF set on error
  2397.        AL = DOS error code (see INT 21/AH=59h)
  2398.     STACK unchanged
  2399. Notes:    called by DOS 3.10-3.31 kernel
  2400.     the redirector is expected to resolve lock conflicts
  2401. SeeAlso: AX=110Bh,INT 21/AH=5Ch
  2402. --------N-2F110A-----------------------------
  2403. INT 2F CU - NETWORK REDIRECTOR (DOS 4+) - LOCK/UNLOCK REGION OF FILE
  2404.     AX = 110Ah
  2405.     BL = function
  2406.         00h lock
  2407.         01h unlock
  2408.     DS:DX -> parameter block (see below)
  2409.     ES:DI -> SFT
  2410.         SFT DPB field -> DPB of drive containing file
  2411.     SS = DOS DS
  2412. Return: CF set on error
  2413.        AL = DOS error code (see INT 21/AH=59h)
  2414. Notes:    called by DOS 4.0+ kernel
  2415.     the redirector is expected to resolve lock conflicts
  2416. SeeAlso: AX=110Bh,INT 21/AH=5Ch
  2417.  
  2418. Format of parameter block:
  2419. Offset    Size    Description
  2420.  00h    DWORD    start offset
  2421.  04h    DWORD    size of region
  2422. --------N-2F110B-----------------------------
  2423. INT 2F CU - NETWORK REDIRECTOR (DOS 3.x only) - UNLOCK REGION OF FILE
  2424.     AX = 110Bh
  2425.     BX = file handle
  2426.     CX:DX = starting offset
  2427.     SI = high word of size
  2428.     STACK: WORD low word of size
  2429.     ES:DI -> SFT for file
  2430.         SFT DPB field -> DPB of drive containing file
  2431. Return: CF set on error
  2432.        AL = DOS error code (see INT 21/AH=59h)
  2433.     STACK unchanged
  2434. Note:    called by DOS 3.1-3.31 kernel; DOS 4.0+ calls AX=110Ah instead
  2435. SeeAlso: AX=110Ah,INT 21/AH=5Ch
  2436. --------N-2F110C-----------------------------
  2437. INT 2F CU - NETWORK REDIRECTOR - GET DISK INFORMATION
  2438.     AX = 110Ch
  2439.     ES:DI -> current directory structure for desired drive
  2440. Return: AL = sectors per cluster
  2441.     AH = media ID byte
  2442.     BX = total clusters
  2443.     CX = bytes per sector
  2444.     DX = number of available clusters
  2445. Note:    called by DOS 3.1+ kernel
  2446. SeeAlso: INT 21/AH=36h
  2447. --------N-2F110D-----------------------------
  2448. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - SET REMOTE FILE'S ATTRIBUTES
  2449.     AX = 110Dh
  2450.     SDA first filename pointer -> name of file
  2451.     ???
  2452. Return: ???
  2453. Note:    similar to AX=110Eh
  2454. SeeAlso: AX=110Eh
  2455. --------N-2F110E-----------------------------
  2456. INT 2F CU - NETWORK REDIRECTOR - SET REMOTE FILE'S ATTRIBUTES
  2457.     AX = 110Eh
  2458.     SS = DOS DS
  2459.     SDA first filename pointer -> fully-qualified name of file
  2460.     SDA CDS pointer -> current directory structure for drive with file
  2461.     STACK: WORD new file attributes
  2462. Return: CF set on error
  2463.         AX = DOS error code (see INT 21/AH=59h)
  2464.     CF clear if successful
  2465.     STACK unchanged
  2466. Note:    called by DOS 3.1+ kernel
  2467. SeeAlso: AX=110Dh,AX=110Fh,INT 21/AX=4301h,INT 21/AH=60h
  2468. --------N-2F110F-----------------------------
  2469. INT 2F CU - NETWORK REDIRECTOR - GET REMOTE FILE'S ATTRIBUTES AND SIZE
  2470.     AX = 110Fh
  2471.     SS = DOS DS
  2472.     SDA first filename pointer -> fully-qualified name of file
  2473.     SDA CDS pointer -> current directory structure for drive with file
  2474. Return: CF set on error
  2475.         AX = DOS error code (see INT 21/AH=59h)
  2476.     CF clear if successful
  2477.         AX = file attributes
  2478.         BX:DI = file size
  2479. Note:    called by DOS 3.1+ kernel
  2480. SeeAlso: AX=110Eh,INT 21/AX=4300h,INT 21/AH=60h
  2481. --------N-2F1110-----------------------------
  2482. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - GET REMOTE FILE'S ATTRIBUTES AND SIZE
  2483.     AX = 1110h
  2484.     SDA first filename pointer -> name of file
  2485.     ???
  2486. Return: ???
  2487. Note:    appears to be similar to AX=110Fh
  2488. SeeAlso: AX=110Eh
  2489. --------N-2F1111-----------------------------
  2490. INT 2F CU - NETWORK REDIRECTOR - RENAME REMOTE FILE
  2491.     AX = 1111h
  2492.     SS = DS = DOS DS
  2493.     SDA first filename pointer = offset of fully-qualified old name
  2494.     SDA second filename pointer = offset of fully-qualified new name
  2495.     SDA CDS pointer -> current directory structure for drive with file
  2496. Return: CF set on error
  2497.         AX = DOS error code (see INT 21/AH=59h)
  2498.     CF clear if successful
  2499. Note:    called by DOS 3.1+ kernel
  2500. SeeAlso: AX=1112h,INT 21/AH=56h,INT 21/AH=60h
  2501. --------N-2F1112-----------------------------
  2502. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - RENAME REMOTE FILE
  2503.     AX = 1112h
  2504.     SS = DS = DOS DS
  2505.     SDA first filename pointer -> name of file
  2506.     ???
  2507. Return: ???
  2508. Note:    similar to AX=1111h
  2509. SeeAlso: AX=1111h
  2510. --------N-2F1113-----------------------------
  2511. INT 2F CU - NETWORK REDIRECTOR - DELETE REMOTE FILE
  2512.     AX = 1113h
  2513.     SS = DS = DOS DS
  2514.     SDA first filename pointer -> fully-qualified filename in DOS DS
  2515.     SDA CDS pointer -> current directory structure for drive with file
  2516. Return: CF set on error
  2517.         AX = DOS error code (see INT 21/AH=59h)
  2518.     CF clear if successful
  2519. Notes:    called by DOS 3.1+ kernel
  2520.     the filespec may contain wildcards
  2521. SeeAlso: AX=1114h,INT 21/AH=41h,INT 21/AH=60h
  2522. --------N-2F1114-----------------------------
  2523. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - DELETE REMOTE FILE
  2524.     AX = 1114h
  2525.     SDA first filename pointer -> name of file
  2526.     ???
  2527. Return: ???
  2528. Note:    similar to AX=1113h
  2529. SeeAlso: AX=1113h
  2530. --------N-2F1115-----------------------------
  2531. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - OPEN REMOTE FILE
  2532.     AX = 1115h
  2533.     SS = DOS DS
  2534.     ES:DI -> SFT ???
  2535.     ???
  2536. Return: ???
  2537. Note:    similar to AX=1116h
  2538. SeeAlso: AX=1116h,AX=112Eh
  2539. --------N-2F1116-----------------------------
  2540. INT 2F CU - NETWORK REDIRECTOR - OPEN EXISTING REMOTE FILE
  2541.     AX = 1116h
  2542.     ES:DI -> uninitialized SFT
  2543.     SS = DOS DS
  2544.     SDA first filename pointer -> fully-qualified name of file to open
  2545.     STACK: WORD file access and sharing modes (see INT 21/AH=3Dh)
  2546. Return: CF set on error
  2547.         AX = DOS error code (see INT 21/AH=59h)
  2548.     CF clear if successful
  2549.         SFT filled (except handle count, which DOS manages itself)
  2550.     STACK unchanged
  2551. Note:    called by DOS 3.1+ kernel
  2552. SeeAlso: AX=1106h,AX=1115h,AX=1117h,AX=1118h,AX=112Eh,INT 21/AH=3Dh
  2553. SeeAlso: INT 21/AH=60h
  2554. --------N-2F1117-----------------------------
  2555. INT 2F CU - NETWORK REDIRECTOR - CREATE/TRUNCATE REMOTE FILE
  2556.     AX = 1117h
  2557.     ES:DI -> uninitialized SFT
  2558.     SS = DOS DS
  2559.     SDA first filename pointer -> fully-qualified name of file to open
  2560.     SDA CDS pointer -> current directory structure for drive with file
  2561.     STACK: WORD file creation mode
  2562.             low byte = file attributes (see INT 21/AH=3Ch)
  2563.             high byte = 00h normal create, 01h create new file
  2564. Return: CF set on error
  2565.         AX = DOS error code (see INT 21/AH=59h)
  2566.     CF clear if successful
  2567.         SFT filled (except handle count, which DOS manages itself)
  2568.     STACK unchanged
  2569. Note:    called by DOS 3.1+ kernel
  2570. SeeAlso: AX=1106h,AX=1116h,AX=1118h,AX=112Eh,INT 21/AH=3Ch,INT 21/AH=60h
  2571. --------N-2F1118-----------------------------
  2572. INT 2F CU - NETWORK REDIRECTOR - CREATE/TRUNCATE FILE WITHOUT CDS
  2573.     AX = 1118h
  2574.     ES:DI -> uninitialized SFT
  2575.     SS = DOS DS
  2576.     SDA first filename pointer -> fully-qualified name of file
  2577.     STACK: WORD file creation mode
  2578.             low byte = file attributes
  2579.             high byte = 00h normal create, 01h create new file
  2580. Return: ???
  2581.     STACK unchanged
  2582. Note:    called by DOS 3.1+ kernel when creating a file on a drive for which the
  2583.       SDA CDS pointer has offset FFFFh
  2584. SeeAlso: AX=1106h,AX=1116h,AX=1117h,AX=112Eh,INT 21/AH=60h
  2585. --------N-2F1119-----------------------------
  2586. INT 2F CU - NETWORK REDIRECTOR - FIND FIRST FILE WITHOUT CDS
  2587.     AX = 1119h
  2588.     SS = DS = DOS DS
  2589.     [DTA] = uninitialized 21-byte findfirst search data (see INT 21/AH=4Eh)
  2590.     SDA first filename pointer -> fully-qualified search template
  2591.     SDA search attribute = attribute mask for search
  2592. Return: CF set on error
  2593.         AX = DOS error code (see INT 21/AH=59h)
  2594.     CF clear if successful
  2595.         [DTA] = updated findfirst search data
  2596.             (bit 7 of first byte must be set)
  2597.         [DTA+15h] = standard directory entry for file
  2598. Notes:    called by DOS 3.1+ kernel
  2599.     DOS 4.x IFSFUNC returns CF set, AX=0003h
  2600. SeeAlso: AX=111Ah,AX=111Bh
  2601. --------N-2F111A-----------------------------
  2602. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - FIND NEXT FILE WITHOUT CDS
  2603.     AX = 111Ah
  2604.     ???
  2605. Return: CF set
  2606.         AX = error code (03h for DOS 4.01 IFSFUNC)
  2607. Note:    use AX=111Ch for DOS 5+
  2608. SeeAlso: AX=1119h,AX=111Ch
  2609. --------N-2F111B-----------------------------
  2610. INT 2F CU - NETWORK REDIRECTOR - FINDFIRST
  2611.     AX = 111Bh
  2612.     SS = DS = DOS DS
  2613.     [DTA] = uninitialized 21-byte findfirst search data (see INT 21/AH=4Eh)
  2614.     SDA first filename pointer -> fully-qualified search template
  2615.     SDA CDS pointer -> current directory structure for drive with file
  2616.     SDA search attribute = attribute mask for search
  2617. Return: CF set on error
  2618.         AX = DOS error code (see INT 21/AH=59h)
  2619.     CF clear if successful
  2620.         [DTA] = updated findfirst search data
  2621.             (bit 7 of first byte must be set)
  2622.         [DTA+15h] = standard directory entry for file
  2623. Note:    called by DOS 3.1+ kernel
  2624. SeeAlso: AX=1119h,AX=111Ch,INT 21/AH=4Eh,INT 21/AH=60h
  2625. --------N-2F111C-----------------------------
  2626. INT 2F CU - NETWORK REDIRECTOR - FINDNEXT
  2627.     AX = 111Ch
  2628.     SS = DS = DOS DS
  2629.     ES:DI -> CDS
  2630.     [DTA] = 21-byte findfirst search data (see INT 21/AH=4Eh)
  2631. Return: CF set on error
  2632.         AX = DOS error code (see INT 21/AH=59h)
  2633.     CF clear if successful
  2634.         [DTA] = updated findfirst search data
  2635.             (bit 7 of first byte must be set)
  2636.         [DTA+15h] = standard directory entry for file
  2637. Note:    called by DOS 3.1+ kernel
  2638. SeeAlso: AX=1119h,AX=111Bh,INT 21/AH=4Fh
  2639. --------N-2F111D-----------------------------
  2640. INT 2F CU - NETWORK REDIRECTOR - CLOSE ALL REMOTE FILES FOR PROCESS (ABORT)
  2641.     AX = 111Dh
  2642.     DS???
  2643.     SS = DOS DS
  2644. Return: ???
  2645. Notes:    used when a process is aborted
  2646.     called by DOS 3.1+ kernel
  2647.     closes all FCBs opened by process
  2648. SeeAlso: INT 21/AX=5D04h
  2649. --------N-2F111E-----------------------------
  2650. INT 2F CU - NETWORK REDIRECTOR - DO REDIRECTION
  2651.     AX = 111Eh
  2652.     SS = DOS DS
  2653.     STACK: WORD function to execute
  2654.         5F00h  get redirection mode
  2655.             BL = type (03h printer, 04h disk)
  2656.             Return: BH = state (00h off, 01h on)
  2657.         5F01h  set redirection mode
  2658.             BL = type (03h printer, 04h disk)
  2659.             BH = state (00h off, 01h on)
  2660.         5F02h  get redirection list entry
  2661.             BX = redirection list index
  2662.             DS:SI -> 16-byte local device name buffer
  2663.             ES:DI -> 128-byte network name buffer
  2664.             Return: must set user's BX to device type and CX to
  2665.                 stored parameter value, using AX=1218h to get
  2666.                 stack frame address
  2667.         5F03h  redirect device
  2668.             BL = device type (see INT 21/AX=5F03h)
  2669.             CX = stored parameter value
  2670.             DS:SI -> ASCIZ source device name
  2671.             ES:DI -> destination ASCIZ network path + ASCIZ passwd
  2672.         5F04h  cancel redirection
  2673.             DS:SI -> ASCIZ device name or network path
  2674.         5F05h  get redirection list extended entry
  2675.             BX = redirection list index
  2676.             DS:SI -> buffer for ASCIZ source device name
  2677.             ES:DI -> buffer for destination ASCIZ network path
  2678.             Return: BH = status flag
  2679.                 BL = type (03h printer, 04h disk)
  2680.                 CX = stored parameter value
  2681.                 BP = NETBIOS local session number
  2682.         5F06h  similar to 5F05h???
  2683. Return: CF set on error
  2684.         AX = error code (see INT 21/AH=59h)
  2685.     STACK unchanged
  2686. Notes:    called by DOS 3.1+ kernel on INT 21/AH=5Fh (including LAN Manager
  2687.       calls)
  2688.     the PC Network 1.00 redirector does not support function 5F06h
  2689. SeeAlso: INT 21/AX=5F00h,INT 21/AX=5F01h,INT 21/AX=5F02h,INT 21/AX=5F03h
  2690. SeeAlso: INT 21/AX=5F04h,INT 21/AX=5F05h,INT 21/AX=5F06h
  2691. --------N-2F111F-----------------------------
  2692. INT 2F CU - NETWORK REDIRECTOR - PRINTER SETUP
  2693.     AX = 111Fh
  2694.     STACK: WORD function
  2695.         5E02h  set printer setup
  2696.         5E03h  get printer setup
  2697.         5E04h  set printer mode
  2698.         5E05h  get printer mode
  2699. Return: CF set on error
  2700.         AX = error code (see INT 21/AH=59h)
  2701.     STACK unchanged
  2702. Note:    called by DOS 3.1+ kernel
  2703. SeeAlso: INT 21/AX=5E02h,INT 21/AX=5E03h,INT 21/AX=5E04h,INT 21/AX=5E05h
  2704. --------N-2F1120-----------------------------
  2705. INT 2F CU - NETWORK REDIRECTOR - FLUSH ALL DISK BUFFERS
  2706.     AX = 1120h
  2707.     DS = DOS DS
  2708.     ???
  2709. Return: CF clear (successful)
  2710. Notes:    called by DOS 3.1+ kernel
  2711.     uses CDS array pointer and LASTDRIVE= entries in DOS list of lists
  2712. SeeAlso: INT 21/AH=0Dh,INT 21/AX=5D01h
  2713. --------N-2F1121-----------------------------
  2714. INT 2F CU - NETWORK REDIRECTOR - SEEK FROM END OF REMOTE FILE
  2715.     AX = 1121h
  2716.     CX:DX = offset (in bytes) from end
  2717.     ES:DI -> SFT
  2718.         SFT DPB field -> DPB of drive with file
  2719.     SS = DOS DS
  2720. Return: CF set on error
  2721.         AL = DOS error code (see INT 21/AH=59h)
  2722.     CF clear if successful
  2723.         DX:AX = new file position
  2724. Note:    called by DOS 3.1+ kernel
  2725. SeeAlso: AX=1228h,INT 21/AH=42h
  2726. --------N-2F1122-----------------------------
  2727. INT 2F CU - NETWORK REDIRECTOR - PROCESS TERMINATION HOOK
  2728.     AX = 1122h
  2729.     SS = DOS DS
  2730.     ???
  2731. Return: ???
  2732. Note:    called by DOS 3.1+ kernel
  2733. --------N-2F1123-----------------------------
  2734. INT 2F CU - NETWORK REDIRECTOR - QUALIFY REMOTE FILENAME
  2735.     AX = 1123h
  2736.     DS:SI -> ASCIZ filename to canonicalize
  2737.     ES:DI -> 128-byte buffer for qualified name
  2738. Return: CF set if not resolved
  2739. Notes:    called by MS-DOS 3.1+ kernel, but not called by DR-DOS 5.0 unless the
  2740.       filename matches the name of a character device
  2741.     called first when DOS attempts to resolve a filename (unless inside an
  2742.       AX=5D00h server call); if this fails, DOS resolves the name locally
  2743. SeeAlso: AX=1221h,INT 21/AH=60h
  2744. --------N-2F1124-----------------------------
  2745. INT 2F CU - NETWORK REDIRECTOR - TURN OFF REMOTE PRINTER
  2746.     AX = 1124h
  2747.     ES:DI -> SFT
  2748.     SS = DOS DS
  2749.     ???
  2750. Return: CX = ???
  2751. Note:    called by DOS 3.1+ kernel if AX=1126h returns CF set
  2752. SeeAlso: AX=1126h
  2753. --------N-2F1125-----------------------------
  2754. INT 2F CU - NETWORK REDIRECTOR - REDIRECTED PRINTER MODE
  2755.     AX = 1125h
  2756.     STACK: WORD subfunction
  2757.         5D07h get print stream state
  2758.             Return: DL = current state
  2759.         5D08h set print stream state
  2760.             DL = new state
  2761.         5D09h finish print job
  2762. Return: CF set on error
  2763.         AX = error code (see INT 21/AH=59h)
  2764.     STACK unchanged
  2765. Note:    called by DOS 3.1+ kernel
  2766. SeeAlso: INT 21/AX=5D07h,INT 21/AX=5D08h,INT 21/AX=5D09h
  2767. --------N-2F1126-----------------------------
  2768. INT 2F CU - NETWORK REDIRECTOR - REMOTE PRINTER ECHO ON/OFF
  2769.     AX = 1126h
  2770.     ES:DI -> SFT for file handle 4???
  2771.     SS = DOS DS???
  2772.     ???
  2773. Return: CF set on error
  2774. Notes:    called by DOS 3.1+ kernel
  2775.     called when print echoing (^P, ^PrtSc) changes state and STDPRN has
  2776.       bit 11 of the device information word in the SFT set
  2777. SeeAlso: AX=1124h
  2778. --------N-2F1127-----------------------------
  2779. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - UNUSED
  2780.     AX = 1127h
  2781. Return: CF set
  2782.         AX = 0001h (invalid function) (see INT 21/AH=59h)
  2783. --------N-2F1128-----------------------------
  2784. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - UNUSED
  2785.     AX = 1128h
  2786. Return: CF set
  2787.         AX = 0001h (invalid function) (see INT 21/AH=59h)
  2788. --------N-2F1129-----------------------------
  2789. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - UNUSED
  2790.     AX = 1129h
  2791. Return: CF set
  2792.         AX = 0001h (invalid function) (see INT 21/AH=59h)
  2793. --------N-2F112A-----------------------------
  2794. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - CLOSE ALL FILES FOR PROCESS
  2795.     AX = 112Ah
  2796.     DS = DOS DS
  2797.     ???
  2798. Return: ???
  2799. Note:    does something to each IFS driver
  2800. --------N-2F112B-----------------------------
  2801. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - GENERIC IOCTL
  2802.     AX = 112Bh
  2803.     SS = DOS DS
  2804.     CX = function/category
  2805.     DS:DX -> parameter block
  2806.     STACK: WORD value of AX on entry to INT 21 (440Ch or 440Dh)
  2807.     ???
  2808. Return: CF set on error
  2809.         AX = DOS error code (see INT 21/AH=59h)
  2810.     CF clear if successful
  2811. Note:    called by DOS 4.0 kernel
  2812. --------N-2F112C-----------------------------
  2813. INT 2F CU - NETWORK REDIRECTOR (DOS 4+) - "UPDATE_CB" - ???
  2814.     AX = 112Ch
  2815.     SS = DOS DS
  2816.     SDA current SFT pointer -> SFT for file
  2817.     ???
  2818. Return: CF set on error
  2819. Note:    called by SHARE in DOS 5.0-6.0
  2820. --------N-2F112D-----------------------------
  2821. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - EXTENDED ATTRIBUTES
  2822.     AX = 112Dh
  2823.     BL = subfunction (value of AL on INT 21)
  2824.         02h get extended attributes
  2825.         03h get extended attribute properties
  2826.         04h set extended attributes
  2827.         Return: CF clear
  2828.         else ???
  2829.         Return: CX = ??? (00h or 02h for DOS 4.01)
  2830.     ES:DI -> SFT for file
  2831.     SS = DOS DS
  2832. Return: DS = DOS DS
  2833. Note:    called by DOS 4.0 kernel on INT 21/AX=5702h,INT 21/AX=5703h,
  2834.       INT 21/AX=5704h
  2835. SeeAlso: INT 21/AX=5702h,INT 21/AX=5703h,INT 21/AX=5704h,INT 21/AH=6Eh
  2836. --------N-2F112E-----------------------------
  2837. INT 2F CU - NETWORK REDIRECTOR (DOS 4+) - EXTENDED OPEN/CREATE FILE
  2838.     AX = 112Eh
  2839.     SS = DS = DOS DS
  2840.     ES:DI -> uninitialized SFT for file
  2841.     STACK: WORD file attribute for created/truncated file
  2842.             low byte = file attributes
  2843.             high byte = 00h normal create/open, 01h create new file
  2844.     SDA first filename pointer -> fully-qualified filename
  2845.     SDA extended file open action = action code (see INT 21/AX=6C00h)
  2846.     SDA extended file open mode = open mode for file (see INT 21/AX=6C00h)
  2847. Return: CF set on error
  2848.         AX = error code
  2849.     CF clear if successful
  2850.         CX = result code
  2851.         01h file opened
  2852.         02h file created
  2853.         03h file replaced (truncated)
  2854.         SFT initialized (except handle count, which DOS manages itself)
  2855. Note:    called by DOS 4+ kernel
  2856. SeeAlso: AX=1115h,AX=1116h,AX=1117h,INT 21/AX=6C00h
  2857. --------N-2F112F-----------------------------
  2858. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - IFS IOCTL
  2859.     AX = 112Fh
  2860.     SS = DOS DS
  2861.     STACK: WORD function in low byte
  2862.         00h ???
  2863.             DS:SI -> Current Directory Structure???
  2864.             CL = drive (1=A:)
  2865.         01h ???
  2866.             DS:SI -> ???
  2867.             CL = file handle???
  2868.         02h ???
  2869.             DS:SI -> Current Directory Structure???
  2870.             DI = ???
  2871.             CX = drive (1=A:)
  2872.     ???
  2873. Return: CF set on error
  2874.         AX = DOS error code (see INT 21/AH=59h)
  2875.     CF clear if successful
  2876. Note:    called by DOS 4.0 kernel
  2877. SeeAlso: INT 21/AH=6Bh
  2878. --------N-2F1130-----------------------------
  2879. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - GET IFSFUNC SEGMENT
  2880.     AX = 1130h
  2881. Return: ES = CS of resident IFSFUNC
  2882. --------N-2F1180-----------------------------
  2883. INT 2F - LAN Manager Enhanced DOS Services - ???
  2884.     AX = 1180h
  2885.     ???
  2886. Return: ???
  2887. --------N-2F1182-----------------------------
  2888. INT 2F - LAN Manager Enhanced DOS Services - INSTALL SERVICE
  2889.     AX = 1182h
  2890.     ???
  2891. Return: ???
  2892. --------N-2F1184-----------------------------
  2893. INT 2F - LAN Manager Enhanced DOS - ???
  2894.     AX = 1184h
  2895.     ???
  2896. Return: ???
  2897. --------N-2F1186-----------------------------
  2898. INT 2F - LAN Manager Enhanced DOS - DosReadAsynchNmPipe
  2899.     AX = 1186h
  2900.     DS:SI -> stack frame (see below)
  2901. Return: CF clear if successful
  2902.     CF set if error
  2903.         AX = error code
  2904. Note:    LAN Manager enhance mode adds features beyond the standard redirector
  2905.       file/printer services
  2906. SeeAlso: AX=118Fh,AX=1190h,AX=1191h,INT 21/AX=5F39h
  2907.  
  2908. Format of DosReadAsynchNmPipe stack frame:
  2909. Offset    Size    Description
  2910.  00h    DWORD    -> number of bytes read
  2911.  04h    WORD    size of buffer
  2912.  06h    DWORD    -> buffer
  2913.  0Ah    DWORD    -> return code
  2914.  0Eh    DWORD    function to call on completion as function( char far *buffer )
  2915.  12h    WORD    handle
  2916. --------N-2F118A-----------------------------
  2917. INT 2F - LAN Manager 2.0+ DOS Enhanced ENCRYPT.EXE - STREAM ENCRYPTION SERVICE
  2918.     AX = 118Ah
  2919.     BX = function (0000h or 0001h)
  2920. Return: CF clear if successful
  2921.         AX = 1100h success
  2922.     CF set if error
  2923.         AX = 0001h, etc.
  2924. SeeAlso: AX=1186h,AH=41h,AH=42h,AH=4Bh
  2925. --------N-2F118B-----------------------------
  2926. INT 2F - LAN Manager Enhanced DOS - ???
  2927.     AX = 118Bh
  2928.     ???
  2929. Return: ???
  2930. --------N-2F118C-----------------------------
  2931. INT 2F - LAN Manager Enhanced DOS - ???
  2932.     AX = 118Ch
  2933.     ???
  2934. Return: ???
  2935. --------N-2F118E-----------------------------
  2936. INT 2F - LAN Manager Enhanced DOS - ???
  2937.     AX = 118Eh
  2938.     ???
  2939. Return: ???
  2940. --------N-2F118F-----------------------------
  2941. INT 2F - LAN Manager Enhanced DOS - DosWriteAsynchNmPipe
  2942.     AX = 118Fh
  2943.     DS:SI -> stack frame (see below)
  2944. Return: CF clear if successful
  2945.     CF set if error
  2946.         AX = error code
  2947. SeeAlso: AX=1186h,AX=1191h,INT 21/AX=5F3Ah
  2948.  
  2949. Format of DosReadAsynchNmPipe stack frame:
  2950. Offset    Size    Description
  2951.  00h    DWORD    -> number of bytes read
  2952.  04h    WORD    Size of buffer
  2953.  06h    DWORD    -> buffer
  2954.  0Ah    DWORD    -> return code
  2955.  0Eh    DWORD    function to call on completion as function( char far *buffer )
  2956.  12h    WORD    handle
  2957. --------N-2F1190-----------------------------
  2958. INT 2F - LAN Manager Enhanced DOS - DosReadAsynchNmPipe2
  2959.     AX = 1190h
  2960.     DS:SI-> stack frame
  2961. Return: CF clear if successful
  2962.     CF set if error
  2963.         AX = error code
  2964. SeeAlso: AX=1186h,AX=1191h
  2965.  
  2966. Format of DosReadAsynchNmPipe2 stack frame:
  2967. Offset    Size    Description
  2968.  00h    DWORD    -> number of bytes read
  2969.  04h    WORD    size of buffer
  2970.  06h    DWORD    -> buffer
  2971.  0Ah    DWORD    -> return code
  2972.  0Eh    DWORD    function to call on completion as function( char far *buffer )
  2973.  12h    WORD    handle
  2974.  14h    DWORD    ???
  2975. --------N-2F1191-----------------------------
  2976. INT 2F - LAN Manager Enhanced DOS - DosWriteAsynchNmPipe2
  2977.     AX = 1191h
  2978.     DS:SI -> stack frame (see below)
  2979. Return: CF clear if successful
  2980.     CF set if error
  2981.         AX = error code
  2982. SeeAlso: AX=118Fh,AX=1190h,INT 21/AX=5F3Ah
  2983.  
  2984. Format of DosReadAsynchNmPipe2 stack frame:
  2985. Offset    Size    Description
  2986.  00h    DWORD    -> number of bytes read
  2987.  04h    WORD    size of buffer
  2988.  06h    DWORD    -> buffer
  2989.  0Ah    DWORD    -> return code
  2990.  0Eh    DWORD    function to call on completion as function( char far *buffer )
  2991.  12h    WORD    handle
  2992.  14h    DWORD    ???
  2993. --------D-2F1200-----------------------------
  2994. INT 2F U - DOS 3+ internal - INSTALLATION CHECK
  2995.     AX = 1200h
  2996. Return: AL = FFh (for compatibility with other INT 2F functions)
  2997. --------D-2F1201-----------------------------
  2998. INT 2F U - DOS 3+ internal - CLOSE CURRENT FILE
  2999.     AX = 1201h
  3000.     SS = DOS DS (must be using a DOS internal stack)
  3001.     SDA current SFT pointer -> SFT of file to close
  3002. Return: CF set on error
  3003.     BX???
  3004.     CX new reference count of SFT
  3005.     ES:DI -> SFT for file
  3006. SeeAlso: AX=1106h,AX=1227h,INT 21/AH=3Eh
  3007. --------D-2F1202-----------------------------
  3008. INT 2F U - DOS 3+ internal - GET INTERRUPT ADDRESS
  3009.     AX = 1202h
  3010.     STACK: WORD vector number
  3011. Return: ES:BX -> interrupt vector
  3012.     STACK unchanged
  3013. --------D-2F1203-----------------------------
  3014. INT 2F U - DOS 3+ internal - GET DOS DATA SEGMENT
  3015.     AX = 1203h
  3016. Return: DS = data segment of IBMDOS.COM/MSDOS.SYS
  3017. Note:    for DOS prior to version 5.0, the data segment is the same as the code
  3018.       segment
  3019. --------D-2F1204-----------------------------
  3020. INT 2F U - DOS 3+ internal - NORMALIZE PATH SEPARATOR
  3021.     AX = 1204h
  3022.     STACK: WORD character to normalize
  3023. Return: AL = normalized character (forward slash turned to backslash, all
  3024.         others unchanged)
  3025.     ZF set if path separator
  3026.     STACK unchanged
  3027. --------D-2F1205-----------------------------
  3028. INT 2F U - DOS 3+ internal - OUTPUT CHARACTER TO STANDARD OUTPUT
  3029.     AX = 1205h
  3030.     STACK: WORD character to output
  3031. Return: STACK unchanged
  3032. Note:    can be called only from within DOS
  3033. --------D-2F1206-----------------------------
  3034. INT 2F U - DOS 3+ internal - INVOKE CRITICAL ERROR
  3035.     AX = 1206h
  3036.     DI = error code
  3037.     BP:SI -> device driver header
  3038.     SS = DOS DS (must be using a DOS internal stack)
  3039.     STACK: WORD value to be passed to INT 24 in AX
  3040. Return: AL = 0-3 for Abort, Retry, Ignore, Fail
  3041.     STACK unchanged
  3042. SeeAlso: INT 24
  3043. --------D-2F1207-----------------------------
  3044. INT 2F U - DOS 3+ internal - MAKE DISK BUFFER MOST-RECENTLY USED
  3045.     AX = 1207h
  3046.     DS:DI -> disk buffer
  3047. Return: nothing
  3048. Desc:    move the indicated buffer to the end of the disk buffer chain (least-
  3049.       recently used is first); under DOS 3.3, the buffer is then moved to
  3050.       the start of the disk buffer chain if it was marked unused
  3051. Notes:    can be called only from within DOS
  3052.     this function is nearly the same as AX=120Fh
  3053. SeeAlso: AX=120Fh
  3054. --------D-2F1208-----------------------------
  3055. INT 2F U - DOS 3+ internal - DECREMENT SFT REFERENCE COUNT
  3056.     AX = 1208h
  3057.     ES:DI -> SFT
  3058. Return: AX = original value of reference count
  3059. Notes:    if the reference count was 1, it is set to FFFFh (since 0 indicates
  3060.       that the SFT is not in use).    It is the caller's responsibility to
  3061.       set the reference count to zero after cleaning up.
  3062.     used by network redirectors such as MSCDEX
  3063. SeeAlso: AX=1106h
  3064. --------D-2F1209-----------------------------
  3065. INT 2F U - DOS 3+ internal - FLUSH AND FREE DISK BUFFER
  3066.     AX = 1209h
  3067.     DS:DI -> disk buffer
  3068. Return: disk buffer marked unused, contents written to disk if buffer dirty
  3069. Note:    can be called only from within DOS
  3070. SeeAlso: AX=120Eh,AX=1215h
  3071. --------D-2F120A-----------------------------
  3072. INT 2F U - DOS 3+ internal - PERFORM CRITICAL ERROR INTERRUPT
  3073.     AX = 120Ah
  3074.     DS = SS = DOS DS (must be using a DOS internal stack)
  3075.     STACK: WORD extended error code
  3076. Return: AL = user response (0=ignore, 1=retry, 2=abort, 3=fail)
  3077.     CF clear if retry, set otherwise
  3078.     STACK unchanged
  3079. Notes:    can only be called during a DOS function call, as it uses various
  3080.       fields in the SDA to set up the registers for the INT 24
  3081.     reportedly sets current DPB's first root directory sector to 1
  3082. SeeAlso: INT 24
  3083. --------D-2F120B-----------------------------
  3084. INT 2F U - DOS 3+ internal - SIGNAL SHARING VIOLATION TO USER
  3085.     AX = 120Bh
  3086.     ES:DI -> system file table entry for previous open of file
  3087.     STACK: WORD extended error code (should be 20h--sharing violation)
  3088. Return: CF clear if operation should be retried
  3089.     CF set if operation should not be retried
  3090.         AX = error code (20h) (see INT 21/AH=59h)
  3091.     STACK unchanged
  3092. Notes:    can only be called during a DOS function call
  3093.     should only be called if an attempt was made to open an already-open
  3094.       file contrary to the sharing rules
  3095.     invokes INT 24 if SFT file opened via FCB or in compatibility mode with
  3096.       inheritance allowed
  3097. --------D-2F120C-----------------------------
  3098. INT 2F U - DOS 3+ internal - OPEN DEVICE AND SET SFT OWNER/MODE
  3099.     AX = 120Ch
  3100.     SDA current SFT pointer -> SFT for file
  3101.     DS = DOS DS
  3102.     SS = DOS DS (must be using a DOS internal stack)
  3103. Return: ES, DI, AX destroyed
  3104. Notes:    invokes "device open" call on device driver for SFT
  3105.     changes owner of last-accessed SFT to calling process if it was opened
  3106.       via FCB
  3107.     called by network redirectors such as MSCDEX
  3108. --------D-2F120D-----------------------------
  3109. INT 2F U - DOS 3+ internal - GET DATE AND TIME
  3110.     AX = 120Dh
  3111.     SS = DOS DS (must be using a DOS internal stack)
  3112. Return: AX = current date in packed format (see INT 21/AX=5700h)
  3113.     DX = current time in packed format (see INT 21/AX=5700h)
  3114. SeeAlso: INT 21/AH=2Ah,INT 21/AH=2Ch
  3115. --------D-2F120E-----------------------------
  3116. INT 2F U - DOS 3+ internal - MARK ALL DISK BUFFERS UNREFERENCED
  3117.     AX = 120Eh
  3118.     SS = DOS DS (must be using a DOS internal stack)
  3119. Return: DS:DI -> first disk buffer
  3120. Notes:    clears "referenced" flag on all disk buffers
  3121.     in DOS 5+, this has become essentially a NOP, invoking the same code
  3122.       used by AX=1224h (SHARING DELAY)
  3123. SeeAlso: AX=1209h,AX=1210h,INT 21/AH=0Dh
  3124. --------D-2F120F-----------------------------
  3125. INT 2F U - DOS 3+ internal - MAKE BUFFER MOST RECENTLY USED
  3126.     AX = 120Fh
  3127.     DS:DI -> disk buffer
  3128.     SS = DOS DS (must be using a DOS internal stack)
  3129. Return: DS:DI -> next buffer in buffer list
  3130. Desc:    move the indicated buffer to the end of the disk buffer chain (least-
  3131.       recently used is first); under DOS 3.3, the buffer is then moved to
  3132.       the start of the disk buffer chain if it was marked unused
  3133. Note:    this function is the same as AX=1207h except that it returns a
  3134.       pointer to the buffer following the specified buffer in the buffer
  3135.       chain
  3136. SeeAlso: AX=1207h
  3137. --------D-2F1210-----------------------------
  3138. INT 2F U - DOS 3+ internal - FIND UNREFERENCED DISK BUFFER
  3139.     AX = 1210h
  3140.     DS:DI -> first disk buffer to check
  3141. Return: ZF clear if found
  3142.         DS:DI -> first unreferenced disk buffer
  3143.     ZF set if not found
  3144. Note:    in DOS 5+, this has become essentially a NOP, invoking the same code
  3145.       used by AX=1224h (SHARING DELAY)
  3146. SeeAlso: AX=120Eh
  3147. --------D-2F1211-----------------------------
  3148. INT 2F U - DOS 3+ internal - NORMALIZE ASCIZ FILENAME
  3149.     AX = 1211h
  3150.     DS:SI -> ASCIZ filename to normalize
  3151.     ES:DI -> buffer for normalized filename
  3152. Return: destination buffer filled with uppercase filename, with slashes turned
  3153.     to backslashes
  3154. SeeAlso: AX=121Eh,AX=1221h
  3155. --------D-2F1212-----------------------------
  3156. INT 2F U - DOS 3+ internal - GET LENGTH OF ASCIZ STRING
  3157.     AX = 1212h
  3158.     ES:DI -> ASCIZ string
  3159. Return: CX = length of string
  3160. SeeAlso: AX=1225h
  3161. --------D-2F1213-----------------------------
  3162. INT 2F U - DOS 3+ internal - UPPERCASE CHARACTER
  3163.     AX = 1213h
  3164.     STACK: WORD character to convert to uppercase
  3165. Return: AL = uppercase character
  3166.     STACK unchanged
  3167. --------D-2F1214-----------------------------
  3168. INT 2F U - DOS 3+ internal - COMPARE FAR POINTERS
  3169.     AX = 1214h
  3170.     DS:SI = first pointer
  3171.     ES:DI = second pointer
  3172. Return: ZF set if pointers are equal, ZF clear if not equal
  3173. --------D-2F1215-----------------------------
  3174. INT 2F U - DOS 3+ internal - FLUSH BUFFER
  3175.     AX = 1215h
  3176.     DS:DI -> disk buffer
  3177.     SS = DOS DS (must be using a DOS internal stack)
  3178.     STACK: WORD drives for which to skip buffer
  3179.         ignore buffer if drive same as high byte, or bytes differ and
  3180.         the buffer is for a drive OTHER than that given in low byte
  3181. Return: STACK unchanged
  3182. Note:    can be called only from within DOS
  3183. SeeAlso: AX=1209h
  3184. --------D-2F1216-----------------------------
  3185. INT 2F U - DOS 3+ internal - GET ADDRESS OF SYSTEM FILE TABLE ENTRY
  3186.     AX = 1216h
  3187.     BX = system file table entry number
  3188. Return: CF clear if successful
  3189.         ES:DI -> system file table entry
  3190.     CF set if BX greater than FILES=
  3191. Note:    supported by DR-DOS 5+
  3192. SeeAlso: AX=1220h
  3193. --------D-2F1217-----------------------------
  3194. INT 2F U - DOS 3+ internal - GET CURRENT DIRECTORY STRUCTURE FOR DRIVE
  3195.     AX = 1217h
  3196.     SS = DOS DS (must be using a DOS internal stack)
  3197.     STACK: WORD drive (0 = A:, 1 = B:, etc)
  3198. Return: CF set on error
  3199.         (drive > LASTDRIVE)
  3200.     CF clear if successful
  3201.         DS:SI -> current directory structure for specified drive
  3202.     STACK unchanged
  3203. SeeAlso: AX=1219h
  3204. --------D-2F1218-----------------------------
  3205. INT 2F U - DOS 3+ internal - GET CALLER'S REGISTERS
  3206.     AX = 1218h
  3207. Return: DS:SI -> saved caller's AX,BX,CX,DX,SI,DI,BP,DS,ES (on stack)
  3208. Note:    only valid while within DOS
  3209. --------D-2F1219-----------------------------
  3210. INT 2F U - DOS 3+ internal - SET DRIVE???
  3211.     AX = 1219h
  3212.     SS = DOS DS (must be using a DOS internal stack)
  3213.     STACK: WORD drive (0 = default, 1 = A:, etc)
  3214. Return: ???
  3215.     STACK unchanged
  3216. Notes:    calls AX=1217h
  3217.     builds a current directory structure if inside server call
  3218.       (INT 21/AX=5D00h)
  3219. SeeAlso: AX=1217h,AX=121Fh
  3220. --------D-2F121A-----------------------------
  3221. INT 2F U - DOS 3+ internal - GET FILE'S DRIVE
  3222.     AX = 121Ah
  3223.     DS:SI -> filename
  3224. Return: AL = drive (0 = default, 1 = A:, etc, FFh = invalid)
  3225.     DS:SI -> filename without leading X: (if present)
  3226. SeeAlso: INT 21/AH=19h,INT 21/AH=60h
  3227. --------D-2F121B-----------------------------
  3228. INT 2F U - DOS 3+ internal - SET YEAR/LENGTH OF FEBRUARY
  3229.     AX = 121Bh
  3230.     CL = year - 1980
  3231. Return: AL = number of days in February
  3232. Note:    requires DS to be set to the DOS code segment
  3233. SeeAlso: INT 21/AH=2Bh
  3234. --------D-2F121C-----------------------------
  3235. INT 2F U - DOS 3+ internal - CHECKSUM MEMORY
  3236.     AX = 121Ch
  3237.     DS:SI -> start of memory to checksum
  3238.     CX = number of bytes
  3239.     DX = initial checksum
  3240.     SS = DOS DS (must be using a DOS internal stack)
  3241. Return: AX, CX destroyed
  3242.     DX = checksum
  3243.     DS:SI -> first byte after checksummed range
  3244. Notes:    used by DOS to determine day count since 1/1/80 given a date
  3245.     supported by DR-DOS 5.0+
  3246. SeeAlso: AX=121Dh
  3247. --------D-2F121D-----------------------------
  3248. INT 2F U - DOS 3+ internal - SUM MEMORY
  3249.     AX = 121Dh
  3250.     DS:SI -> memory to add up
  3251.     CX = 0000h
  3252.     DX = limit
  3253. Return: AL = byte which exceeded limit
  3254.     CX = number of bytes before limit exceeded
  3255.     DX = remainder after adding first CX bytes
  3256.     DS:SI -> byte beyond the one which exceeded the limit
  3257. Notes:    used by DOS to determine year or month given day count since 1/1/80
  3258.     supported by DR-DOS 5.0+
  3259. SeeAlso: AX=121Ch
  3260. --------D-2F121E-----------------------------
  3261. INT 2F U - DOS 3+ internal - COMPARE FILENAMES
  3262.     AX = 121Eh
  3263.     DS:SI -> first ASCIZ filename
  3264.     ES:DI -> second ASCIZ filename
  3265. Return: ZF set if filenames equivalent, ZF clear if not
  3266. Note:    supported by DR-DOS 5.0+
  3267. SeeAlso: AX=1211h,AX=1221h
  3268. --------D-2F121F-----------------------------
  3269. INT 2F U - DOS 3+ internal - BUILD CURRENT DIRECTORY STRUCTURE
  3270.     AX = 121Fh
  3271.     SS = DOS DS (must be using a DOS internal stack)
  3272.     STACK: WORD drive letter
  3273. Return: ES:DI -> current directory structure (will be overwritten by next call)
  3274.     STACK unchanged
  3275. --------D-2F1220-----------------------------
  3276. INT 2F U - DOS 3+ internal - GET JOB FILE TABLE ENTRY
  3277.     AX = 1220h
  3278.     BX = file handle
  3279. Return: CF set on error
  3280.         AL = 6 (invalid file handle)
  3281.     CF clear if successful
  3282.         ES:DI -> JFT entry for file handle in current process
  3283. Notes:    the byte pointed at by ES:DI contains the number of the SFT for the
  3284.       file handle, or FFh if the handle is not open
  3285.     supported by DR-DOS 5.0+
  3286. SeeAlso: AX=1216h,AX=1229h
  3287. --------D-2F1221-----------------------------
  3288. INT 2F U - DOS 3+ internal - CANONICALIZE FILE NAME
  3289.     AX = 1221h
  3290.     DS:SI -> file name to be fully qualified
  3291.     ES:DI -> 128-byte buffer for resulting canonical file name
  3292.     SS = DOS DS (must be using a DOS internal stack)
  3293. Return: (see INT 21/AH=60h)
  3294. Note:    identical to INT 21/AH=60h
  3295. SeeAlso: AX=1123h,INT 21/AH=60h
  3296. --------D-2F1222-----------------------------
  3297. INT 2F U - DOS 3+ internal - SET EXTENDED ERROR INFO
  3298.     AX = 1222h
  3299.     SS = DOS data segment
  3300.     SS:SI -> 4-byte records
  3301.         BYTE    error code, FFh = last record
  3302.         BYTE    error class, FFh = don't change
  3303.         BYTE    suggested action, FFh = don't change
  3304.         BYTE    error locus, FFh = don't change
  3305.     SDA error code set
  3306. Return: SI destroyed
  3307.     SDA error class, error locus, and suggested action fields set
  3308. Note:    can be called only from within DOS
  3309. SeeAlso: AX=122Dh,INT 21/AH=59h
  3310. --------D-2F1223-----------------------------
  3311. INT 2F U - DOS 3+ internal - CHECK IF CHARACTER DEVICE
  3312.     AX = 1223h
  3313.     DS = DOS DS
  3314.     SS = DOS DS (must be using a DOS internal stack)
  3315.     SDA+218h (DOS 3.10-3.30) = eight-character blank-padded name
  3316.     SDA+22Bh (DOS 4.0-6.0) = eight-character blank-padded name
  3317. Return: CF set if no character device by that name found
  3318.     CF clear if found
  3319.         BH = low byte of device attribute word
  3320. Note:    can only be called from within DOS
  3321. SeeAlso: INT 21/AX=5D06h,INT 21/AX=5D0Bh
  3322. --------D-2F1224-----------------------------
  3323. INT 2F U - DOS 3+ internal - SHARING RETRY DELAY
  3324.     AX = 1224h
  3325.     SS = DOS DS (must be using a DOS internal stack)
  3326. Return: after delay set by INT 21/AX=440Bh, unless in server call
  3327.       (INT 21/AX=5D00h)
  3328. Note:    delay is dependent on the processor speed, and is skipped entirely if
  3329.       inside a server call
  3330. SeeAlso: INT 21/AX=440Bh,INT 21/AH=52h,INT 62/AX=0097h
  3331. --------D-2F1225-----------------------------
  3332. INT 2F U - DOS 3+ internal - GET LENGTH OF ASCIZ STRING
  3333.     AX = 1225h
  3334.     DS:SI -> ASCIZ string
  3335. Return: CX = length of string
  3336. Note:    supported by DR-DOS 5.0+
  3337. SeeAlso: AX=1212h
  3338. --------D-2F1226-----------------------------
  3339. INT 2F U - DOS 3.3+ internal - OPEN FILE
  3340.     AX = 1226h
  3341.     CL = access mode
  3342.     DS:DX -> ASCIZ filename
  3343.     SS = DOS DS (must be using a DOS internal stack)
  3344. Return: CF set on error
  3345.         AL = error code (see INT 21/AH=59h)
  3346.     CF clear if successful
  3347.         AX = file handle
  3348. Notes:    can only be called from within DOS
  3349.     equivalent to INT 21/AH=3Dh
  3350.     used by NLSFUNC to access COUNTRY.SYS when invoked by the DOS kernel
  3351. SeeAlso: AX=1227h,INT 21/AH=3Dh
  3352. --------D-2F1227-----------------------------
  3353. INT 2F U - DOS 3.3+ internal - CLOSE FILE
  3354.     AX = 1227h
  3355.     BX = file handle
  3356.     SS = DOS DS (must be using a DOS internal stack)
  3357. Return: CF set on error
  3358.         AL = 06h invalid file handle
  3359.     CF clear if successful
  3360. Notes:    can only be called from within DOS
  3361.     equivalent to INT 21/AH=3Eh
  3362.     used by NLSFUNC to access COUNTRY.SYS when invoked by the DOS kernel
  3363. SeeAlso: AX=1106h,AX=1201h,AX=1226h,INT 21/AH=3Eh
  3364. --------D-2F1228BP4200-----------------------
  3365. INT 2F U - DOS 3.3+ internal - MOVE FILE POINTER
  3366.     AX = 1228h
  3367.     BP = 4200h, 4201h, 4202h (see INT 21/AH=42h)
  3368.     BX = file handle
  3369.     CX:DX = offset in bytes
  3370.     SS = DOS DS (must be using a DOS internal stack)
  3371. Return: as for INT 21/AH=42h
  3372. Notes:    equivalent to INT 21/AH=42h, but may only be called from inside a DOS
  3373.       function call
  3374.     sets user stack frame pointer to dummy buffer, moves BP to AX, performs
  3375.       LSEEK, and restores frame pointer
  3376.     used by NLSFUNC to access COUNTRY.SYS when invoked by the DOS kernel
  3377. SeeAlso: INT 21/AH=42h
  3378. --------D-2F1229-----------------------------
  3379. INT 2F U - DOS 3.3+ internal - READ FROM FILE
  3380.     AX = 1229h
  3381.     BX = file handle
  3382.     CX = number of bytes to read
  3383.     DS:DX -> buffer
  3384.     SS = DOS DS (must be using a DOS internal stack)
  3385. Return: as for INT 21/AH=3Fh
  3386. Notes:    equivalent to INT 21/AH=3Fh, but may only be called when already inside
  3387.       a DOS function call
  3388.     used by NLSFUNC to access COUNTRY.SYS when invoked by the DOS kernel
  3389. SeeAlso: AX=1226h,INT 21/AH=3Fh
  3390. --------D-2F122A-----------------------------
  3391. INT 2F U - DOS 3.3+ internal - SET FASTOPEN ENTRY POINT
  3392.     AX = 122Ah
  3393.     BX = entry point to set (0001h or 0002h)
  3394.     DS:SI -> FASTOPEN entry point
  3395.         (entry point not set if SI = FFFFh for DOS 4+)
  3396. Return: CF set if specified entry point already set
  3397. Notes:    entry point in BX is ignored under DOS 3.30
  3398.     both entry points set to same handler by DOS 4.01
  3399.     DOS 5.0 and 6.0 only set entry point 1
  3400.  
  3401. DOS 3.30+ FASTOPEN is called with:
  3402.     AL = 01h  Lookup
  3403.         CX = ??? seems to be offset
  3404.         DI = ??? seems to be offset
  3405.         SI = offset in DOS DS of filename
  3406.     AL = 02h  insert file into FASTOPEN cache
  3407.     AL = 03h  delete file from FASTOPEN cache
  3408.         SI = offset in DOS DS of filename
  3409.     AL = 04h  purge FASTOPEN cache
  3410.         AH = subfunction (00h,01h,02h)
  3411.         ES:DI -> ???
  3412.         CX = ??? (subfunctions 01h and 02h only)
  3413. Returns: CF set on error or not installed
  3414. Note: function 03h calls function 01h first
  3415.  
  3416. PC-DOS 4.01 FASTOPEN is additionally called with:
  3417.     AL = 04h ???
  3418.         AH = 03h
  3419.         ???
  3420.     AL = 05h ???
  3421.     AL = 0Bh ???
  3422.     AL = 0Ch ???
  3423.     AL = 0Dh ???
  3424.     AL = 0Eh ???
  3425.     AL = 0Fh ???
  3426.     AL = 10h ???
  3427.  
  3428. MS-DOS 5.0-6.0 FASTOPEN is additionally called with:
  3429.     AL = 04h  purge FASTOPEN cache
  3430.         AH = 03h
  3431.         ???
  3432.     AL = 05h ???
  3433.         DL = drive (00h = A:)
  3434.         ???
  3435.     AL = 06h ???
  3436.         ???
  3437. --------D-2F122B-----------------------------
  3438. INT 2F U - DOS 3.3+ internal - IOCTL
  3439.     AX = 122Bh
  3440.     BP = 44xxh
  3441.     SS = DOS DS (must be using a DOS internal stack)
  3442.     additional registers as appropriate for INT 21/AX=44xxh
  3443. Return: as for INT 21/AH=44h
  3444. Notes:    equivalent to INT 21/AH=44h, but may only be called when already inside
  3445.       a DOS function call
  3446.     sets user stack frame pointer to dummy buffer, moves BP to AX, performs
  3447.       IOCTL, and restores frame pointer
  3448.     used by NLSFUNC in accessing COUNTRY.SYS when invoked by the DOS kernel
  3449. SeeAlso: INT 21/AH=44h
  3450. --------D-2F122C-----------------------------
  3451. INT 2F U - DOS 3.3+ internal - GET DEVICE CHAIN
  3452.     AX = 122Ch
  3453. Return: BX:AX -> header of second device driver (NUL is first) in driver chain
  3454. Note:    although this function exists in DR-DOS 5.0, it returns 0000h:0000h
  3455. SeeAlso: INT 21/AH=52h
  3456. --------D-2F122D-----------------------------
  3457. INT 2F U - DOS 3.3+ internal - GET EXTENDED ERROR CODE
  3458.     AX = 122Dh
  3459. Return: AX = current extended error code
  3460. SeeAlso: AX=1222h,INT 21/AH=59h
  3461. --------D-2F122E-----------------------------
  3462. INT 2F U - DOS 4+ internal - GET OR SET ERROR TABLE ADDRESSES
  3463.     AX = 122Eh
  3464.     DL = subfunction
  3465.         00h get standard DOS error table
  3466.         Return: ES:DI -> error table
  3467.                  (DOS 4: errors 00h-12h,50h-5Bh)
  3468.                  (DOS 5: errors 00h-26h,4Fh,51h-59h)
  3469.         01h set standard DOS error table
  3470.         ES:DI -> error table
  3471.         02h get parameter error table (errors 00h-0Ah)
  3472.         Return: ES:DI -> error table
  3473.         03h set parameter error table
  3474.         ES:DI -> error table
  3475.         04h get critical/SHARE error table (errors 13h-2Bh)
  3476.         Return: ES:DI -> error table
  3477.         05h set critical/SHARE error table
  3478.         ES:DI -> error table
  3479.         06h get ??? error table
  3480.         Return: ES:DI -> error table or 0000h:0000h
  3481.         07h set ??? error table
  3482.         ES:DI -> error table
  3483.         08h get error message retriever (see below)
  3484.         Return: ES:DI -> FAR procedure to fetch error message
  3485.         09h set ??? error table
  3486.         ES:DI -> error table
  3487. Notes:    if the returned segment on a "get" is 0001h, then the offset specifies
  3488.       the offset of the error message table within COMMAND.COM, and the
  3489.       procedure returned by DL=08h should be called
  3490.     DOS 5+ COMMAND.COM does not allow setting any of the addresses (calls
  3491.       with DL odd are ignored); they are always returned with segment 0001h
  3492.     for DOS 5.0, the standard and critical/SHARE error tables are combined
  3493.       into a single error table
  3494. SeeAlso: AX=0500h,INT 21/AH=59h
  3495.  
  3496. Format of DOS 4.x error table:
  3497. Offset    Size    Description
  3498.  00h    BYTE    FFh
  3499.  01h  2 BYTEs    04h,00h (DOS version???)
  3500.  03h    BYTE    number of error headers following
  3501.  04h 2N WORDs    table of all error headers for table
  3502.         Offset    Size    Description
  3503.          00h    WORD    error message number
  3504.          02h    WORD    offset of error message from start of header
  3505.                 error messages are count byte followed by msg
  3506. Note:    DOS 5 error tables consist of one word per error number; each word
  3507.       contains either the offset of a counted string or 0000h
  3508.  
  3509. Call error retrieval function with:
  3510.     AX = error number
  3511.     DI = offset of error table
  3512. Return: ES:DI -> error message (counted string)
  3513. Notes:    this function needs to access COMMAND.COM if the messages were not
  3514.       loaded into memory permanently with /MSG; the caller should assume
  3515.       that the returned message will be overwritten by the next call of
  3516.       the function
  3517.     supported by DR-DOS 5.0
  3518.  
  3519. Values for parameter errors:
  3520.  01h    Too many parameters
  3521.  02h    Required Parameter missing
  3522.  03h    Invalid switch
  3523.  04h    Invalid keyword
  3524.  06h    Parameter value not in allowed range
  3525.  07h    Parameter value not allowed
  3526.  08h    Parameter value not allowed
  3527.  09h    Parameter format not correct
  3528.  0Ah    Invalid parameter
  3529.  0Bh    Invalid parameter combination
  3530. --------D-2F122F-----------------------------
  3531. INT 2F U - DOS 4.x internal - SET DOS VERSION NUMBER TO RETURN
  3532.     AX = 122Fh
  3533.     DX = DOS version number (0000h = return true DOS version)
  3534. Note:    not available under DR-DOS 5.0 or 6.0
  3535. SeeAlso: INT 21/AH=30h,INT 21/AX=3306h
  3536. ----------2F12FFBX0006-----------------------
  3537. INT 2F U - DR-DOS 6 - VIDEO MEMORY SPACE CONTROL
  3538.     AX = 12FFh
  3539.     BX = 0006h
  3540.     DX = 0000h
  3541.     CX = function
  3542.         0000h get status of video memory space (MEMMAX /V)
  3543.         0001h map memory into video memory space (MEMMAX +V)
  3544.         0002h unmap memory from video memory space (MEMMAX -V)
  3545. Return: CF clear if successful
  3546.         AX = 0000h (successful)
  3547.         BX = segment of reserved video RAM
  3548.         CX = segment of used video RAM
  3549.         DX = segment of first upper MCB
  3550. Note:    this functionality is provided by EMM386, and partially supported by
  3551.       HIDOS.SYS
  3552. SeeAlso: AX=D201h/BX=4849h
  3553. --------D-2F13-------------------------------
  3554. INT 2F U - DOS 3.2+ - SET DISK INTERRUPT HANDLER
  3555.     AH = 13h
  3556.     DS:DX -> interrupt handler disk driver calls on read/write
  3557.     ES:BX = address to restore INT 13 to on system halt (exit from root
  3558.          shell) or warm boot (INT 19)
  3559. Return: DS:DX from previous invocation of this function
  3560.     ES:BX from previous invocation of this function
  3561. Notes:    IO.SYS hooks INT 13 and inserts one or more filters ahead of the
  3562.       original INT 13 handler.  The first is for disk change detection
  3563.       on floppy drives, the second is for tracking formatting calls and
  3564.       correcting DMA boundary errors, the third is for working around
  3565.       problems in a particular version of IBM's ROM BIOS
  3566.     before the first call, ES:BX points at the original BIOS INT 13; DS:DX
  3567.       also points there unless IO.SYS has installed a special filter for
  3568.       hard disk reads (on systems with model byte FCh and BIOS date
  3569.       "01/10/84" only), in which case it points at the special filter
  3570.     most DOS 3.3+ disk access is via the vector in DS:DX, although a few
  3571.       functions are still invoked via an INT 13 instruction
  3572.     this is a dangerous security loophole for any virus-monitoring software
  3573.       which does not trap this call ("INT13", "Nomenklatura", and many
  3574.       Bulgarian viruses are known to use it to get the original ROM entry
  3575.       point)
  3576. SeeAlso: INT 13/AH=01h,INT 19,INT 9D"VIRUS"
  3577. ----------2F13-------------------------------
  3578. INT 2F U - MS-NET - ???
  3579.     AH = 13h
  3580.     ???
  3581. Return: ???
  3582. Note:    supposedly used to move (or control the movement of) NCBs
  3583. --------U-2F1400-----------------------------
  3584. INT 2F C - NLSFUNC.COM - INSTALLATION CHECK
  3585.     AX = 1400h
  3586. Return: AL = 00h not installed, OK to install
  3587.          01h not installed, not OK
  3588.          FFh installed
  3589. Notes:    called by DOS v3.3+ kernel
  3590.     supported by OS/2 v1.3+ compatibility box, which always returns AL=FFh
  3591.     supported by DR-DOS 5.0
  3592.     documented for MS-DOS 5+, but undocumented in prior versions
  3593. SeeAlso: AX=1401h"NLSFUNC",AX=1402h"NLSFUNC"
  3594. --------D-2F1400-----------------------------
  3595. INT 2F - European MS-DOS 4.0 POPUP - "CheckPu" - INSTALLATION CHECK
  3596.     AX = 1400h
  3597. Return: AX = FFFFh if installed
  3598.         BX = maximum memory required to save screen and keyboard info
  3599.     CF clear if successful
  3600.     CF set on error
  3601.         AX = error code
  3602.         0002h invalid function
  3603.         0004h unknown error
  3604. Note:    the POPUP interface is used by background programs (see INT 21/AH=80h)
  3605.       to communicate with the user
  3606. SeeAlso: AX=1401h"POPUP",AX=1402h"POPUP",AX=1403h"POPUP"
  3607. --------U-2F1401-----------------------------
  3608. INT 2F CU - NLSFUNC.COM - CHANGE CODE PAGE
  3609.     AX = 1401h
  3610.     DS:SI -> internal code page structure (see below)
  3611.     BX = new code page (see INT 21/AX=6602h)
  3612.     DX = country code???
  3613. Return: AL = status
  3614.          00h successful
  3615.          else DOS error code
  3616. Note:    called by DOS v3.3+ kernel
  3617. SeeAlso: AX=1400h"NLSFUNC",AX=1402h"NLSFUNC",INT 21/AH=66h
  3618.  
  3619. Format of DOS 3.30 internal code page structure:
  3620. Offset    Size    Description
  3621.  00h  8 BYTEs    ???
  3622.  08h 64 BYTEs    name of country information file
  3623.  48h    WORD    system code page
  3624.  4Ah    WORD    number of supported subfunctions
  3625.  4Ch  5 BYTEs    data to return for INT 21/AX=6502h
  3626.  51h  5 BYTEs    data to return for INT 21/AX=6504h
  3627.  56h  5 BYTEs    data to return for INT 21/AX=6505h
  3628.  5Bh  5 BYTEs    data to return for INT 21/AX=6506h
  3629.  60h 41 BYTEs    data to return for INT 21/AX=6501h
  3630. --------D-2F1401-----------------------------
  3631. INT 2F - European MS-DOS 4.0 POPUP - "PostPu" - OPEN/CLOSE POPUP SCREEN
  3632.     AX = 1401h
  3633.     DL = function (00h open, 01h close)
  3634.     DH = wait flag
  3635.         00h block until screen opens
  3636.         01h return error if screen is not available
  3637.         02h urgent--always open screen immediately
  3638. Return: CF clear if successful
  3639.         BX = amount of memory needed to save screen and keyboard info,
  3640.         0000h if default save location can be used (only if DH was 02h)
  3641.     CF set on error
  3642. Note:    the application using the screen is frozen until the popup screen is
  3643.       closed
  3644. SeeAlso: AX=1400h"POPUP",AX=1402h"POPUP",AX=1403h"POPUP"
  3645. --------U-2F1402-----------------------------
  3646. INT 2F CU - NLSFUNC.COM - GET EXTENDED COUNTRY INFO
  3647.     AX = 1402h
  3648.     BP = subfunction (same as AL for INT 21/AH=65h)
  3649.     BX = code page (see INT 21/AX=6602h)
  3650.     DX = country code (see INT 21/AH=38h)
  3651.     DS:SI -> internal code page structure (see AX=1401h)
  3652.     ES:DI -> user buffer
  3653.     CX = size of user buffer
  3654. Return: AL = status
  3655.         00h successful
  3656.         else DOS error code
  3657. Notes:    called by DOS v3.3+ kernel on INT 21/AH=65h
  3658.     code page structure apparently only needed for COUNTRY.SYS pathname
  3659. SeeAlso: AX=1401h"NLSFUNC",AX=1403h"NLSFUNC",AX=1404h,INT 21/AH=65h
  3660. --------D-2F1402-----------------------------
  3661. INT 2F - European MS-DOS 4.0 POPUP - "SavePu" - SAVE POPUP SCREEN
  3662.     AX = 1402h
  3663.     ES:DI -> save buffer (0000h:0000h for default buffer in POPUP)
  3664. Return: CF clear if successful
  3665.     CF set on error
  3666.         AX = error code
  3667.         0001h process does not own screen
  3668.         0004h unknown error
  3669.         0005h invalid pointer
  3670. SeeAlso: AX=1400h"POPUP",AX=1401h"POPUP",AX=1403h"POPUP"
  3671. --------U-2F1403-----------------------------
  3672. INT 2F CU - NLSFUNC.COM - SET CODE PAGE
  3673.     AX = 1403h
  3674.     DS:SI -> internal code page structure (see AX=1401h)
  3675.     BX = code page (see INT 21/AX=6602h)
  3676.     DX = country code (see INT 21/AH=38h)
  3677. Return: AL = status
  3678.          ???
  3679. Note:    called by DOS v3.3+ kernel on INT 21/AH=38h
  3680. SeeAlso: AX=1402h"NLSFUNC",AX=1404h,INT 21/AH=38h"SET"
  3681. --------D-2F1403-----------------------------
  3682. INT 2F - European MS-DOS 4.0 POPUP - "RestorePu" - RESTORE SCREEN
  3683.     AX = 1403h
  3684.     ES:DI -> buffer containing saved screen
  3685.         (0000h:0000h for default buffer in POPUP)
  3686. Return: CF clear if successful
  3687.     CF set on error
  3688.         AX = error code (see AX=1402h"POPUP")
  3689. SeeAlso: AX=1400h"POPUP",AX=1401h"POPUP",AX=1402h"POPUP"
  3690. --------U-2F1404-----------------------------
  3691. INT 2F CU - NLSFUNC.COM - GET COUNTRY INFO
  3692.     AX = 1404h
  3693.     BX = code page (see INT 21/AX=6602h)
  3694.     DX = country code (see INT 21/AH=38h)
  3695.     DS:SI -> internal code page structure (see AX=1401h)
  3696.     ES:DI -> user buffer
  3697. Return: AL = status
  3698.          ???
  3699. Notes:    called by DOS v3.3+ kernel on INT 21/AH=38h
  3700.     code page structure apparently only needed for COUNTRY.SYS pathname
  3701. SeeAlso: AX=1402h,AX=1403h,INT 21/AH=38h"GET"
  3702. --------U-2F14FE-----------------------------
  3703. INT 2F U - DR-DOS 5.0 NLSFUNC - GET EXTENDED COUNTRY INFORMATION
  3704.     AX = 14FEh
  3705.     BX = code page (FFFFh=global code page) (see INT 21/AX=6602h)
  3706.     DX = country ID (FFFFh=current country) (see INT 21/AH=38h)
  3707.     ES:DI -> country information buffer
  3708.     CL = info ID
  3709.         01h get general internationalization info
  3710.         02h get pointer to uppercase table
  3711.         04h get pointer to filename uppercase table
  3712.         05h get pointer to filename terminator table
  3713.         06h get pointer to collating sequence table
  3714.         07h get pointer to Double-Byte Character Set table
  3715.     CF set (used to return error if not installed)
  3716. Return: CF clear if successful
  3717.         DS:SI -> requested information
  3718.     CF set on error
  3719. Notes:    DR-DOS 5.0 NLSFUNC returns CF set and AX=0001h if AL was not 00h, FEh,
  3720.       or FFh on entry.
  3721.     the DR-DOS kernel calls this function on INT 21/AX=6501h
  3722.     the value in CL is not range-checked by the DR-DOS 5.0 NLSFUNC
  3723. SeeAlso: AX=14FFh,INT 21/AH=65h
  3724.  
  3725. Format of DR-DOS COUNTRY.SYS file:
  3726. Offset    Size    Description
  3727.  00h 126 BYTEs    copyright notice (terminated with Ctrl-Z, padded with NULs)
  3728.  7Eh    WORD    signature EDC1h
  3729.  80h    var    country pointer records
  3730.     Offset    Size    Description
  3731.      00h    WORD    country code (0000h if end of array)
  3732.      02h    WORD    code page
  3733.      04h    WORD    ??? (0000h)
  3734.      06h  7 WORDs    offsets in file for data tables for subfunctions
  3735.             01h-07h
  3736.  var    var    country information
  3737. --------U-2F14FF-----------------------------
  3738. INT 2F U - DR-DOS 5.0 NLSFUNC - PREPARE CODE PAGE
  3739.     AX = 14FFh
  3740.     BX = code page
  3741. Return: AX = ???
  3742.     ZF set if AX=0000h
  3743. Notes:    DR-DOS 5.0 NLSFUNC returns CF set and AX=0001h if AL was not 00h, FEh,
  3744.       or FFh on entry.
  3745.     passes codepage preparation request to each character device supporting
  3746.       the generic IOCTL call
  3747. SeeAlso: AX=14FEh,INT 21/AX=440Ch,INT 21/AX=6602h
  3748. --------U-2F1500-----------------------------
  3749. INT 2F - DOS 4.00 GRAPHICS.COM - INSTALLATION CHECK
  3750.     AX = 1500h
  3751. Return: AX = FFFFh
  3752.     ES:DI -> ??? (graphics data?)
  3753. Note:    this installation check conflicts with the CD-ROM Extensions
  3754.       installation check; moved to AX=AC00h in later versions
  3755. SeeAlso: AX=AC00h
  3756. --------d-2F1500BX0000-----------------------
  3757. INT 2F - CD-ROM - INSTALLATION CHECK
  3758.     AX = 1500h
  3759.     BX = 0000h
  3760. Return: BX = number of CD-ROM drive letters used
  3761.     CX = starting drive letter (0=A:)
  3762. Notes:    this installation check DOES NOT follow the format used by other
  3763.       software
  3764.     this installation check conflicts with the DOS 4.00 GRAPHICS.COM
  3765.       installation check
  3766. SeeAlso: INT 2F/AX=D000h"Lotus"
  3767. --------d-2F1501-----------------------------
  3768. INT 2F - CD-ROM - GET DRIVE DEVICE LIST
  3769.     AX = 1501h
  3770.     ES:BX -> buffer to hold drive letter list (5 bytes per drive letter)
  3771. Return: buffer filled, for each drive letter
  3772.       BYTE    subunit number in driver
  3773.       DWORD address of device driver header
  3774. --------d-2F1502-----------------------------
  3775. INT 2F - CD-ROM - GET COPYRIGHT FILE NAME
  3776.     AX = 1502h
  3777.     ES:BX -> 38-byte buffer for name of copyright file
  3778.     CX = drive number (0=A:)
  3779. Return: CF set if drive is not a CD-ROM drive
  3780.         AX = 000Fh (invalid drive)
  3781.     CF clear if successful
  3782. SeeAlso: AX=1503h
  3783. --------d-2F1503-----------------------------
  3784. INT 2F - CD-ROM - GET ABSTRACT FILE NAME
  3785.     AX = 1503h
  3786.     ES:BX -> 38-byte buffer for name of abstract file
  3787.     CX = drive number (0=A:)
  3788. Return: CF set if drive is not a CD-ROM drive
  3789.         AX = 000Fh (invalid drive)
  3790.     CF clear if successful
  3791. SeeAlso: AX=1502h,AX=1504h
  3792. --------d-2F1504-----------------------------
  3793. INT 2F - CD-ROM - GET BIBLIOGRAPHIC DOC FILE NAME
  3794.     AX = 1504h
  3795.     ES:BX -> 38-byte buffer for name of bibliographic documentation file
  3796.     CX = drive number (0=A:)
  3797. Return: CF set if drive is not a CD-ROM drive
  3798.         AX = 000Fh (invalid drive)
  3799.     CF clear if successful
  3800. SeeAlso: AX=1502h,AX=1503h
  3801. --------d-2F1505-----------------------------
  3802. INT 2F - CD-ROM - READ VTOC
  3803.     AX = 1505h
  3804.     ES:BX -> 2048-byte buffer
  3805.     CX = drive number (0=A:)
  3806.     DX = sector index (0=first volume descriptor,1=second,...)
  3807. Return: CF set on error
  3808.         AX = error code (15=invalid drive,21=not ready)
  3809.     CF clear if successful
  3810.         AX = volume descriptor type (1=standard,FFh=terminator,0=other)
  3811. --------d-2F1506-----------------------------
  3812. INT 2F - CD-ROM - TURN DEBUGGING ON
  3813.     AX = 1506h
  3814.     BX = debugging function to enable
  3815. Note:    reserved for development
  3816. SeeAlso: AX=1507h
  3817. --------d-2F1507-----------------------------
  3818. INT 2F - CD-ROM - TURN DEBUGGING OFF
  3819.     AX = 1507h
  3820.     BX = debugging function to disable
  3821. Note:    reserved for development
  3822. SeeAlso: AX=1506h
  3823. --------d-2F1508-----------------------------
  3824. INT 2F - CD-ROM - ABSOLUTE DISK READ
  3825.     AX = 1508h
  3826.     ES:BX -> buffer
  3827.     CX = drive number (0=A:)
  3828.     SI:DI = starting sector number
  3829.     DX = number of sectors to read
  3830. Return: CF set on error
  3831.         AL = error code (15=invalid drive,21=not ready)
  3832.     CF clear if successful
  3833. SeeAlso: AX=1509h
  3834. --------d-2F1509-----------------------------
  3835. INT 2F - CD-ROM - ABSOLUTE DISK WRITE
  3836.     AX = 1509h
  3837.     ES:BX -> buffer
  3838.     CX = drive number (0=A:)
  3839.     SI:DI = starting sector number
  3840.     DX = number of sectors to write
  3841. Note:    corresponds to INT 26h and is currently reserved and nonfunctional
  3842. SeeAlso: AX=1508h
  3843. --------d-2F150A-----------------------------
  3844. INT 2F - CD-ROM - RESERVED
  3845.     AX = 150Ah
  3846. --------d-2F150B-----------------------------
  3847. INT 2F - CD-ROM v2.00+ - DRIVE CHECK
  3848.     AX = 150Bh
  3849.     CX = drive number (0=A:)
  3850. Return: BX = ADADh if MSCDEX.EXE installed
  3851.         AX = 0000h if drive not supported
  3852.         nonzero if supported
  3853. SeeAlso: AX=150Dh
  3854. --------d-2F150C-----------------------------
  3855. INT 2F - CD-ROM v2.00+ - GET MSCDEX.EXE VERSION
  3856.     AX = 150Ch
  3857. Return: BH = major version
  3858.     BL = minor version
  3859. Note:    MSCDEX.EXE versions prior to 2.00 return BX=0
  3860. --------d-2F150D-----------------------------
  3861. INT 2F - CD-ROM v2.00+ - GET CD-ROM DRIVE LETTERS
  3862.     AX = 150Dh
  3863.     ES:BX -> buffer for drive letter list (1 byte per drive)
  3864. Return: buffer filled with drive numbers (0=A:).  Each byte corresponds
  3865.     to the drive in the same position for function 1501h
  3866. SeeAlso: AX=150Bh
  3867. --------d-2F150E-----------------------------
  3868. INT 2F - CD-ROM v2.00+ - GET/SET VOLUME DESCRIPTOR PREFERENCE
  3869.     AX = 150Eh
  3870.     BX = subfunction
  3871.         00h get preference
  3872.         DX = 0000h
  3873.         Return: DX = preference settings
  3874.         01h set preference
  3875.         DH = volume descriptor preference
  3876.             01h = primary volume descriptor
  3877.             02h = supplementary volume descriptor
  3878.         DL = supplementary volume descriptor preference
  3879.             01h = shift-Kanji
  3880.     CX = drive number (0=A:)
  3881. Return: CF set on error
  3882.         AX = error code (15=invalid drive,1=invalid function)
  3883.     CF clear if successful
  3884. --------d-2F150F-----------------------------
  3885. INT 2F - CD-ROM v2.00+ - GET DIRECTORY ENTRY
  3886.     AX = 150Fh
  3887.     CL = drive number (0=A:)
  3888.     CH bit 0 = copy flag
  3889.         clear if direct copy
  3890.         set if copy to structure which removed ISO/High Sierra diffs
  3891.     ES:BX -> ASCIZ path name
  3892.     SI:DI -> buffer for directory entry (see below)
  3893.          minimum 255 bytes for direct copy
  3894. Return: CF set on error
  3895.         AX = error code
  3896.     CF clear if succesful
  3897.         AX = disk format (0=High Sierra,1=ISO 9660)
  3898.  
  3899. Format of directory entry (direct copy):
  3900. Offset    Size    Description
  3901.  00h    BYTE  length of directory entry
  3902.  01h    BYTE  length of XAR in Logical Block Numbers
  3903.  02h    DWORD LBN of data, Intel (little-endian) format
  3904.  06h    DWORD LBN of data, Motorola (big-endian) format
  3905.  0Ah    DWORD length of file, Intel format
  3906.  0Eh    DWORD length of file, Motorola format
  3907. ---High Sierra---
  3908.  12h  6 BYTEs date and time
  3909.  18h    BYTE  bit flags
  3910.  19h    BYTE  reserved
  3911. ---ISO 9660---
  3912.  12h  7 BYTEs date and time
  3913.  19h    BYTE  bit flags
  3914. ---both formats---
  3915.  1Ah    BYTE  interleave size
  3916.  1Bh    BYTE  interleave skip factor
  3917.  1Ch    WORD  volume set sequence number, Intel format
  3918.  1Eh    WORD  volume set sequence number, Motorola format
  3919.  20h    BYTE  length of file name
  3920.  21h  N BYTEs file name
  3921.     BYTE (optional) padding if filename is odd length
  3922.       N BYTEs system data
  3923.  
  3924. Format of directory entry (canonicalized):
  3925. Offset    Size    Description
  3926.  00h    BYTE    length of XAR in Logical Block Numbers
  3927.  01h    DWORD    Logical Block Number of file start
  3928.  05h    WORD    size of disk in logical blocks
  3929.  07h    DWORD    file length in bytes
  3930.  0Bh  7 BYTEs    date and time
  3931.  12h    BYTE    bit flags
  3932.  13h    BYTE    interleave size
  3933.  14h    BYTE    interleave skip factor
  3934.  15h    WORD    volume set sequence number
  3935.  17h    BYTE    length of file name
  3936.  18h 38 BYTEs    ASCIZ filename
  3937.  3Eh    WORD    file version number
  3938.  40h    BYTE    number of bytes of system use data
  3939.  41h 220 BYTEs    system use data
  3940. --------d-2F1510-----------------------------
  3941. INT 2F - CD-ROM v2.10+ - SEND DEVICE DRIVER REQUEST
  3942.     AX = 1510h
  3943.     CX = CD-ROM drive letter (0 = A, 1 = B, etc)
  3944.     ES:BX -> CD-ROM device driver request header (see AX=0802h)
  3945. --------W-2F1600-----------------------------
  3946. INT 2F - MS Windows - WINDOWS ENHANCED MODE INSTALLATION CHECK
  3947.     AX = 1600h
  3948. Return: AL = status
  3949.         00h neither Windows 3.x enhanced mode nor Windows/386 2.x running
  3950.         01h Windows/386 2.x running
  3951.         80h XMS version 1 driver installed (neither Windows 3.x enhanced
  3952.          mode nor Windows/386 2.x running) (obsolete--see note)
  3953.         FFh Windows/386 2.x running
  3954.     AL = anything else
  3955.         AL = Windows major version number >= 3
  3956.         AH = Windows minor version number
  3957. Notes:    INT 2F/AH=16h comprises an API for non-Windows programs (DOS device
  3958.       drivers, TSRs, and applications) to cooperate with multitasking
  3959.       Windows/386 2.x and Windows 3.x and higher enhanced mode.
  3960.     certain calls are also supported in the Microsoft 80286 DOS extender in
  3961.       Windows standard mode
  3962.     this function served as the installation check and AX=1610h served to
  3963.       get the driver entry point for XMS version 1, which is now obsolete.
  3964.       Use AX=4300h and AX=4310h instead
  3965. SeeAlso: AX=160Ah,AX=1610h,AX=4300h,AX=4680h
  3966. Index:    installation check;XMS version 1
  3967. --------W-2F1602-----------------------------
  3968. INT 2F - MS Windows/386 2.x - GET API ENTRY POINT
  3969.     AX = 1602h
  3970. Return: ES:DI -> Windows/386 2.x API procedure entry point
  3971. Notes:    this interface is supported in Windows 3.x only for 2.x compatibility
  3972.     to get the current virtual machine (VM) ID in Windows/386 2.x:
  3973.         AX = 0000h
  3974.         ES:DI -> return address
  3975.         JUMP to address returned from INT 2F/AX=1602h
  3976.     After JUMP, at return address:
  3977.         BX = current VM ID.
  3978. SeeAlso: AX=C020h
  3979. --------W-2F1603-----------------------------
  3980. INT 2F - MS Windows/386 - GET INSTANCE DATA
  3981.     AX = 1603h
  3982. Return: AX = 5248h ('RH') if supported
  3983.         DS:SI -> Windows/386 instance data (see below)
  3984. Notes:    reportedly supported by RM Nimbus MS-DOS 3.3 kernel
  3985.     this function is called by DOSMGR when AX=1607h/BX=0015h is not
  3986.       supported, as is the case in DOS versions prior to 5.0
  3987.     see Geoff Chappell's book _DOS_Internals_ for additional discussions of
  3988.       this function, DOSMGR's behavior, and instancing in general
  3989. SeeAlso: AX=1607h/BX=0015h
  3990.  
  3991. Format of Windows/386 instance data:
  3992. Offset    Size    Description
  3993.  00h    WORD    segment of IO.SYS (0000h = default 0070h)
  3994.  02h    WORD    offset in IO.SYS of STACKS data structure (DOS 3.2x)
  3995.         0000h if not applicable
  3996.  04h    WORD    number of instance data entries (max 32)
  3997.  06h    Array of instance data entries
  3998.     Offset    Size    Description
  3999.      00h    WORD    segment (0002h = DOS kernel)
  4000.      02h    WORD    offset
  4001.      04h    WORD    size
  4002. --------W-2F1605-----------------------------
  4003. INT 2F - MS Windows - WINDOWS ENH MODE & 286 DOSX INIT BROADCAST
  4004.     AX = 1605h
  4005.     ES:BX = 0000h:0000h
  4006.     DS:SI = 0000h:0000h
  4007.     CX = 0000h
  4008.     DX = flags
  4009.         bit 0 = 0 if Windows enhanced-mode initialization
  4010.         bit 0 = 1 if Microsoft 286 DOS extender initialization
  4011.         bits 1-15 reserved (undefined)
  4012.     DI = version number (major in upper byte, minor in lower)
  4013. Return: CX = 0000h if okay for Windows to load
  4014.     CX <> 0 if Windows should not load
  4015.     ES:BX -> startup info structure (see below)
  4016.     DS:SI -> virtual86 mode enable/disable callback or 0000h:0000h
  4017. Notes:    the Windows enhanced mode loader and Microsoft 286 DOS extender will
  4018.       broadcast an INT 2F/AX=1605h call when initializing.    Any DOS device
  4019.       driver or TSR can watch for this broadcast and return the appropriate
  4020.       values.  If the driver or TSR returns CX <> 0, it is also its
  4021.       responsibility to display an error message.
  4022.     each handler must first chain to the prior INT 2F handler with
  4023.       registers unchanged before processing the call
  4024.     if the handler requires local data on a per-VM basis, it must store the
  4025.       returned ES:BX in the "next" field of a startup info structure and
  4026.       return a pointer to that structure in ES:BX
  4027.     a single TSR may set the V86 mode enable/disable callback; if DS:SI is
  4028.       already nonzero, the TSR must fail the initialization by setting CX
  4029.       nonzero
  4030. SeeAlso: AX=1606h,AX=1608h,AX=4B05h
  4031.  
  4032. Format of Startup Information Structure:
  4033. Offset    Size    Description
  4034.  00h  2 BYTEs    major, minor version of info structure
  4035.  02h    DWORD    pointer to next startup info structure or 0000h:0000h
  4036.  06h    DWORD    pointer to ASCIZ name of virtual device file or 0000h:0000h
  4037.  0Ah    DWORD    virtual device reference data (see below)
  4038.         (only used if above nonzero)
  4039.  0Eh    DWORD    pointer to instance data records or 0000h:0000h
  4040.  
  4041. Format of one Instance Item in array:
  4042. Offset    Size    Description
  4043.  00h    DWORD    address of instance data (end of array if 0000h:0000h)
  4044.  04h    WORD    size of instance data
  4045.  
  4046. Format of Virtual Device Reference Data:
  4047. Offset    Size    Description
  4048.  00h    DWORD    physical address of ??? or 00000000h
  4049.  04h    DWORD    physical address of ??? table
  4050.  08h    DWORD    "DEST_PAGE" address to which pages must be mapped
  4051.  0Ch  N DWORDs    "SRC_PAGE" physical addresses of the pages
  4052.         00000000h = end of table
  4053. Note:    EMM386.EXE sets the first pointer to the start of the device driver
  4054.       chain, the second pointer to a field of 40h bytes followed by a
  4055.       16-bit offset to the end of the SRC_PAGE table, and DEST_PAGE to
  4056.       the start segment of the UMB area
  4057.  
  4058. Virtual mode enable/disable procedure called with:
  4059.     AX = 0000h disable V86 mode
  4060.     AX = 0001h enable V86 mode
  4061.     interrupts disabled
  4062. Return: CF set on error
  4063.     CF clear if successful
  4064.     interrupts disabled
  4065. --------W-2F1606-----------------------------
  4066. INT 2F - MS Windows - WINDOWS ENH MODE & 286 DOSX EXIT BROADCAST
  4067.     AX = 1606h
  4068.     DX = flags
  4069.         bit 0 = 0 if Windows enhanced-mode exit
  4070.         bit 0 = 1 if Microsoft 286 DOS extender exit
  4071.         bits 1-15 reserved (undefined)
  4072. Notes:    if the init broadcast fails (AX=1605h returned CX <> 0), then this
  4073.       broadcast will be issued immediately.
  4074.     this call will be issued in real mode
  4075. SeeAlso: AX=1605h,AX=1609h
  4076. --------W-2F1607-----------------------------
  4077. INT 2F - MS Windows - VIRTUAL DEVICE CALL OUT API
  4078.     AX = 1607h
  4079.     BX = virtual device ID (see INT 2F/AX=1684h)
  4080.     CX = (usually) callout subfunction
  4081. Return: (usually) AX,BX,CX,DX,ES contain results
  4082. Notes:    more of a convention than an API, this call specifies a standard
  4083.       mechanism for Windows enhanced-mode virtual devices (VxD's) to talk
  4084.       to DOS device drivers and TSRs
  4085.     see below for details on several virtual devices
  4086. SeeAlso: AX=1605h,AX=1607h/BX=000Ch,AX=1607h/BX=0014h,AX=1607h/BX=0015h
  4087. SeeAlso: AX=1684h,AX=C020h
  4088. --------W-2F1607BX0006-----------------------
  4089. INT 2F - MS Windows - "V86MMGR" VIRTUAL DEVICE API
  4090.     AX = 1607h
  4091.     BX = 0006h (VxD identifier of "V86MMGR")
  4092.     CX = 0000h
  4093. Return: AX = status
  4094.         0000h if local A20 state changed
  4095.         1607h if A20 unchanged
  4096.         other if global A20 state changed
  4097. --------W-2F1607BX000C-----------------------
  4098. INT 2F - MS Windows - "VMD" VIRTUAL DEVICE API
  4099.     AX = 1607h
  4100.     BX = 000Ch (VxD identifier of "VMD")
  4101. Return: CX = nonzero if mouse driver already virtualized
  4102. Note:    VMD (Virtual Mouse Driver) calls this and then checks whether CX is
  4103.       nonzero; if yes, it will not automatically virtualize the mouse
  4104.       driver.  This would be used if MOUSE.COM already virtualizes
  4105.       itself using the Windows API.
  4106. SeeAlso: AX=1607h/BX=0014h,AX=1607h/BX=0015h
  4107. --------W-2F1607BX0014-----------------------
  4108. INT 2F - MS Windows - "VNETBIOS" VIRTUAL DEVICE API
  4109.     AX = 1607h
  4110.     BX = 0014H (VxD identifier of "VNETBIOS")
  4111. Return: ES:DI -> 128-byte table specifying VNETBIOS actions for each NetBIOS
  4112.         command code (see below)
  4113. Note:    VNETBIOS (Virtual NetBIOS) calls this function to determine whether
  4114.       the NetBIOS has an extensions Windows should know about
  4115. SeeAlso: AX=1607h/BX=000Ch,AX=1607h/BX=0015h
  4116.  
  4117. Values for action code:
  4118.  00h    "VN_Unknown" unknown command
  4119.  04h    "VN_No_Map"  no memory mapping necessary
  4120.  08h    "VN_Map_In"  input buffer is quickly used, so no global mapping needed
  4121.  0Ch    "VN_Map_In"  output buffer is quickly used, so no global mapping needed
  4122.  10h    "VN_Map_In_Out"     buffer is quickly used, so no global mapping needed
  4123.  14h    "VN_Chain_Send"     the chain-send command
  4124.  18h    "VN_Cancel"    special case for cancel command
  4125.  1Ch    "VN_Buffer_In"    buffer is incoming
  4126.  20h    "VN_Buffer_Out" buffer is outgoing
  4127.  24h    "VN_Buffer_In_Out" buffer used for both incoming and outgoing data
  4128. --------D-2F1607BX0015-----------------------
  4129. INT 2F - MS Windows - "DOSMGR" VIRTUAL DEVICE API
  4130.     AX = 1607h
  4131.     BX = 0015h (VxD identifier of "DOSMGR")
  4132.     CX = function
  4133.         0000h query instance processing
  4134.         DX = 0000h
  4135.         Return: CX = state
  4136.                 0000h not instanced
  4137.                 other instanced (DOS 5+ kernel returns 0001h)
  4138.                 DX = segment of DOS drivers or 0000h for
  4139.                     default of 0070h
  4140.                 ES:BX -> patch table (see below)
  4141.         0001h set patches in DOS
  4142.         DX = bit mask of patch requests
  4143.             bit 0 enable critical sections
  4144.             bit 1 NOP setting/checking user ID
  4145.             bit 2 turn INT 21/AH=3Fh on STDIN into polling loop
  4146.             bit 3 trap stack fault in "SYSINIT" to WIN386
  4147.             bit 4 BIOS patch to trap "Insert disk X:" to WIN386
  4148.         Return: AX = B97Ch
  4149.             BX = bit mask of patches applied
  4150.             DX = A2ABh
  4151.         0002h remove patches in DOS (ignored by DOS 5.0 kernel)
  4152.         DX = bit mask of patch requests (see function 0001h)
  4153.         0003h get size of DOS data structures
  4154.         DX = bit mask of request (only one bit can be set)
  4155.             bit 0: Current Directory Structure size
  4156.         Return: if supported request:
  4157.                 AX = B97Ch
  4158.                 CX = size in bytes of requested structure
  4159.                 DX = A2ABh
  4160.             else:
  4161.                 all registers preserved
  4162.         0004h determine instanced data structures
  4163.         Return: AX = B97Ch if supported
  4164.             DX = A2ABh if supported (DOS 5+ kernel returns 0000h)
  4165.             BX = bit mask of instanced items
  4166.                 bit 0: CDS
  4167.                 bit 1: SFT
  4168.                 bit 2: device list
  4169.                 bit 3: DOS swappable data area
  4170.         0005h get device driver size
  4171.         ES = segment of device driver
  4172.         Return: DX:AX = 0000h:0000h on error (not dev. driver segment)
  4173.             DX:AX = A2ABh:B97Ch if successful
  4174.                 BX:CX = size of device driver in bytes
  4175. Notes:    DOSMGR (DOS Manager) will check whether the OEM DOS/BIOS data has
  4176.       been instanced via this API and will not perform its own default
  4177.       instancing of the normal DOS/BIOS data if so; if this API is not
  4178.       supported, DOSMGR will also try to access instancing data through
  4179.       INT 2F/AX=1603h
  4180.     these functions are supported by the DOS 5+ kernel; DOSMGR contains
  4181.       tables of instancing information for earlier versions of DOS
  4182.     see Geoff Chappell's book _DOS_Internals_ for additional discussions of
  4183.       DOSMGR's behavior and instancing in general
  4184. SeeAlso: AX=1603h,AX=1605h,AX=1607h/BX=000Ch,AX=1607h/BX=0014h,AX=1684h
  4185.  
  4186. Format of patch table:
  4187. Offset    Size    Description
  4188.  00h  2 BYTEs    DOS version (major, minor)
  4189.  02h    WORD    offset in DOS data segment of "SAVEDS"
  4190.  04h    WORD    offset in DOS data segment of "SAVEBX"
  4191.  06h    WORD    offset in DOS data segment of InDOS flag
  4192.  08h    WORD    offset in DOS data segment of User ID word
  4193.  0Ah    WORD    offset in DOS data segment of "CritPatch" table to enable
  4194.         critical section calls (see INT 2A/AH=80h)
  4195.  0Ch    WORD    (DOS 5+ only) offset in DOS data segment of "UMB_HEAD",
  4196.         containing segment of last MCB in conventional memory
  4197. --------E-2F1607BX22C0-----------------------
  4198. INT 2F - Rational Systems DOS/4GW - ???
  4199.     AX = 1607h
  4200.     BX = 22C0h
  4201.     ???
  4202. Return: ???
  4203. SeeAlso: INT 15/AX=BF02h,INT 15/AX=BF04h
  4204. --------W-2F1608-----------------------------
  4205. INT 2F C - MS Windows - WINDOWS ENHANCED MODE INIT COMPLETE BROADCAST
  4206.     AX = 1608h
  4207. Notes:    called after all installable devices have been initialized
  4208.     real-mode software may be called between the Windows enhanced-mode init
  4209.       call (AX=1605h) and this call; the software must detect this
  4210.       situation
  4211. SeeAlso: AX=1605h,AX=1609h
  4212. --------W-2F1609-----------------------------
  4213. INT 2F C - MS Windows - WINDOWS ENHANCED MODE BEGIN EXIT BROADCAST
  4214.     AX = 1609h
  4215. Note:    called at the beginning of a normal exit sequence; not made in the
  4216.       event of a fatal system crash
  4217. SeeAlso: AX=1606h,AX=1608h
  4218. --------W-2F160A-----------------------------
  4219. INT 2F - MS Windows 3.1 - IDENTIFY WINDOWS VERSION AND TYPE
  4220.     AX = 160Ah
  4221. Return: AX = 0000h if call supported
  4222.         BX = version (BH=major, BL=minor)
  4223.         CX = mode (0002h = standard, 0003h = enhanced)
  4224. SeeAlso: AX=1600h,AX=4680h
  4225. --------W-2F160B-----------------------------
  4226. INT 2F - MS Windows 3.1 - IDENTIFY TSRs
  4227.     AX = 160Bh
  4228.     ES:DI -> communication structure (see below) or 0000h:0000h
  4229. Return: ES:DI -> communication structure
  4230. Desc:    this call allows Windows-aware TSRs to make themselves known to
  4231.       Windows.
  4232. Note:    the TSR should allocate a communication structure, place the given
  4233.       ES:DI pointer in the first field, and return a pointer to the new
  4234.       structure
  4235. SeeAlso: AX=1605h,AX=160Ch,AX=4B01h,AX=4B05h
  4236.  
  4237. Format of TSR-to-Windows communication structure:
  4238. Offset    Size    Description
  4239.  00h    DWORD    pointer to next structure
  4240.  04h    WORD    PSP segment
  4241.  06h    WORD    API version ID (0100h)
  4242.  08h    WORD    EXEC flags
  4243.         bit 0: "WINEXEC"
  4244.         bit 1: "LOADLIBRARY"
  4245.         bit 2: "OPENDRIVER"
  4246.  0Ah    WORD    "exec_cmd_show"
  4247.  0Ch    DWORD    "exec_cmd"
  4248.  10h  4 BYTEs    reserved (0)
  4249.  14h    DWORD    pointer to TSR ID block (see below)
  4250.  18h    DWORD    pointer to TSR data block or 0000h:0000h
  4251.  
  4252. Format of Norton Utilities 6.0 TSR ID block:
  4253. Offset    Size    Description
  4254.  00h    WORD    length of name string
  4255.  02h  N BYTEs    name of TSR's executable
  4256. --------W-2F160C-----------------------------
  4257. INT 2F - MS Windows 3.1 - DETECT ROMs
  4258.     AX = 160Ch
  4259.     ???
  4260. Return: ???
  4261. Note:    used by ROM Windows
  4262. SeeAlso: AX=160Bh
  4263. --------m-2F1610-----------------------------
  4264. INT 2F - XMS v1.x only - GET DRIVER ADDRESS
  4265.     AX = 1610h
  4266.     details unavailable
  4267. Note:    this function and AX=1600h were only used in XMS version 1 and are now
  4268.       obsolete.  Use AX=4300h and AX=4310h instead
  4269. SeeAlso: AX=1600h,AX=4310h
  4270. --------W-2F1680-----------------------------
  4271. INT 2F - MS Windows, DPMI, various - RELEASE CURRENT VIRTUAL MACHINE TIME-SLICE
  4272.     AX = 1680h
  4273. Return: AL = 00h if the call is supported
  4274.     AL = 80h (unchanged) if the call is not supported
  4275. Notes:    programs can use this function in idle loops to enhance performance
  4276.       under multitaskers; this call is supported by MS Windows 3.0, DOS 5+,
  4277.       DPMI 1.0+, and will be supported in OS/2 2.0 for multitasking DOS
  4278.       applications
  4279.     does not block the program; it just gives up the remainder of the time
  4280.       slice
  4281.     should not be used by Windows-specific programs
  4282. SeeAlso: INT 15/AX=1000h,INT 15/AX=5305h,INT 21/AH=89h,INT 7A/BX=000Ah
  4283. --------W-2F1681-----------------------------
  4284. INT 2F - MS Windows 3+ - BEGIN CRITICAL SECTION
  4285.     AX = 1681h
  4286. Notes:    used to prevent a task switch from occurring
  4287.     should be followed by an INT 2F/AX=1682h call as soon as possible
  4288.     nested calls are allowed, and must be followed by an appropriate number
  4289.       of "end critical section" calls
  4290.     not supported in Windows/386 2.x. Get INDOS flag with INT 21/AH=34h and
  4291.       and increment by hand.
  4292. SeeAlso: AX=1682h,INT 15/AX=101Bh,INT 21/AH=34h
  4293. --------W-2F1682-----------------------------
  4294. INT 2F - MS Windows 3+ - END CRITICAL SECTION
  4295.     AX = 1682h
  4296. Notes:    not supported in Windows/386 2.x.  Get InDOS flag with INT 21/AH=34h
  4297.       and decrement by hand, taking care not to decrement InDOS flag
  4298.       through zero
  4299. SeeAlso: AX=1681h,INT 15/AX=101Ch,INT 21/AH=34h
  4300. --------W-2F1683-----------------------------
  4301. INT 2F - MS Windows 3+ - GET CURRENT VIRTUAL MACHINE ID
  4302.     AX = 1683h
  4303. Return: BX = current virtual machine (VM) ID
  4304. Notes:    Windows itself currently runs in VM 1, but this can't be relied upon
  4305.     VM IDs are reused when VMs are destroyed
  4306.     an ID of 0 will never be returned
  4307. SeeAlso: AX=1684h,AX=1685h,AX=168Bh
  4308. --------W-2F1684-----------------------------
  4309. INT 2F - MS Windows - GET DEVICE API ENTRY POINT
  4310.     AX = 1684h
  4311.     BX = virtual device (VxD) ID (see below)
  4312.     ES:DI = 0000h:0000h
  4313. Return: ES:DI -> VxD API entry point, or 0:0 if the VxD does not support an API
  4314. Note:    some Windows enhanced-mode virtual devices provide services that
  4315.       applications can access.  For example, the Virtual Display Device
  4316.       (VDD) provides an API used in turn by WINOLDAP.
  4317. SeeAlso: AX=1683h
  4318.  
  4319. Values for VxD ID:
  4320. Value  Name    CallOut V86 PM    Description
  4321.  01h    VMM            Virtual Machine Manager
  4322.  02h    Debug
  4323.  03h    VPICD        Y  Y    Virtual Prog. Interrupt Controller (PIC) Device
  4324.  04h    VDMAD        N  N    Virtual Direct Memory Access (DMA) Device
  4325.  05h    VTD        Y  Y    Virtual Timer Device
  4326.  06h    V86MMGR        N  N    Virtual 8086 Mode Device
  4327.  07h    PAGESWAP    N  N    Paging Device
  4328.  08h    Parity        N  N    Parity-check trapper
  4329.  09h    Reboot        N  Y    Ctrl-Alt-Del handler
  4330.  0Ah    VDD        N  Y    Virtual Display Device (GRABBER)
  4331.  0Bh    VSD        N  N    Virtual Sound Device
  4332.  0Ch    VMD      Y    Y  Y    Virtual Mouse Device
  4333.  0Dh    VKD        N  Y    Virtual Keyboard Device
  4334.  0Eh    VCD        N  Y    Virtual COMM Device
  4335.  0Fh    VPD            Virtual Printer Device
  4336.  10h    VHD            Virtual Hard Disk Device (Windows 3.0)
  4337.  10h    BLOCKDEV    N  N    Virtual Hard Disk Device (Windows 3.1)
  4338.  11h    VMCPD            Virtual Math CoProcessor Device
  4339.  12h    EBIOS        N  N    Reserve EBIOS page (e.g., on PS/2)
  4340.  13h    BIOSXLAT        Map ROM BIOS API between prot & V86 mode
  4341.  14h    VNETBIOS  Y    N  N    Virtual NetBIOS Device
  4342.  15h    DOSMGR        Y  N
  4343.  16h    WINLOAD
  4344.  17h    SHELL        N  Y
  4345.  18h    VMPoll        N  N
  4346.  19h    VPROD
  4347.  1Ah    DOSNET        N  N    assures network integrity across VMs
  4348.  1Bh    VFD        N  N    Virtual Floppy Device
  4349.  1Ch    VDD2            Secondary display adapter
  4350.  1Dh    WINDEBUG    N  Y
  4351.  1Eh    TSRLoad            TSR instance utility
  4352.  1Fh    BiosHook        BIOS interrupt hooker VxD
  4353.  20h    Int13       N    N  N
  4354.  21h    PageFile    N  Y    Paging File device
  4355.  22h    SCSI
  4356.  23h    MCA_POS
  4357.  24h    SCSIFD            SCSI FastDisk device
  4358.  25h    VPEND            Pen device
  4359.  26h    APM            Advanced Power Management
  4360. 442h    VTDAPI
  4361. 444h    VADMAD            Autoinitialize DMA (Windows 3.0)
  4362. 1025h    MMD
  4363. Note:    The high bit of the VxD ID is reserved for future use. The
  4364.     next 10 bits are the OEM # which is assigned by Microsoft. The
  4365.     low 5 bits are the device number.  Naturally, this scheme has not
  4366.     been adhered to.
  4367.  
  4368. Call VTD.386 entry point with:
  4369.     AX = 0000h get VTD version number
  4370.         Return: AH = major version
  4371.             AL = minor version
  4372.     AX = 0100h get current clock tick time
  4373.         Return: EDX:EAX = clock tick time in 840ns units since Windows was
  4374.                 started
  4375.     AX = 0101h get current system time in milliseconds
  4376.         Return: EAX = time in milliseconds that Windows has been running
  4377.     AX = 0102h get current virtual machine time
  4378.         Return: EAX = cumulative amount of time the virtual machine has
  4379.             been active, in milliseconds
  4380. Note:    should only be called directly when TOOLHELP.DLL TimerCount() cannot
  4381.       be called
  4382.  
  4383. Call VADMAD entry point with:
  4384.     DX = operation
  4385.         0000h set VADMAD mode
  4386.         AX = desired mode
  4387.         0001h set VADMAD channel
  4388.         AX = desired channel
  4389. Note:    after setting mode/channel, start the DMA operation with an OUT to
  4390.       I/O port 0Bh (channels 0-3) or D6h (channels 4-7)
  4391. --------W-2F1685-----------------------------
  4392. INT 2F - MS Windows - SWITCH VMs AND CALLBACK
  4393.     AX = 1685h
  4394.     BX = VM ID of virtual machine to switch to
  4395.     CX = flags
  4396.         bit 0 wait until interrupts enabled
  4397.         bit 1 wait until critical section unowned
  4398.         bits 2-15 reserved (zero)
  4399.     DX:SI = priority boost (see VMM.INC)
  4400.     ES:DI -> FAR procedure to callback
  4401. Return: CF set on error
  4402.         AX = error code
  4403.         01h invalid VM ID
  4404.         02h invalid priority boost
  4405.         03h invalid flags
  4406.     CF clear if successful
  4407.         event will be or has been called
  4408. Notes:    some DOS devices, such as networks, need to call functions in a
  4409.       specific VM. This call forces the appropriate VM to be installed.
  4410.     the callback procedure must preserve all registers and return with IRET
  4411. SeeAlso: AX=1683h,INT 15/AX=1117h
  4412. --------E-2F1686-----------------------------
  4413. INT 2F - DOS Protected-Mode Interface - DETECT MODE
  4414.     AX = 1686h
  4415. Return: AX = 0000h if operating in protected mode under DPMI (INT 31 available)
  4416.     AX nonzero if in real/V86 mode or no DPMI (INT 31 not available)
  4417. SeeAlso: AX=1687h
  4418. --------E-2F1687-----------------------------
  4419. INT 2F - DOS Protected-Mode Interface - INSTALLATION CHECK
  4420.     AX = 1687h
  4421. Return: AX = 0000h if installed
  4422.         BX = flags
  4423.         bit 0: 32-bit programs supported
  4424.         CL = processor type (02h=80286, 03h=80386, 04h=80486)
  4425.         DH = DPMI major version
  4426.         DL = two-digit DPMI minor version
  4427.         SI = number of paragraphs of DOS extender private data
  4428.         ES:DI -> DPMI mode-switch entry point
  4429.     AX nonzero if not installed
  4430. SeeAlso: AX=1686h,AX=43E0h,AX=DE01h/BX=4450h,AX=FB42h/BX=0001h
  4431. SeeAlso: INT 31/AX=0400h,INT 31/AX=5702h,INT 38/AH=10h
  4432.  
  4433. Call mode switch entry point with:
  4434.     AX = flags
  4435.         bit 0: set if 32-bit program
  4436.     ES = real mode segment of buffer for DPMI private data (ignored if
  4437.         SI was zero)
  4438. Return: CF set on error
  4439.         program still in real mode
  4440.         AX = error code (DPMI 1.0+)
  4441.            8011h unable to allocate all necessary descriptors
  4442.            8021h 32-bit program specified, but 16-bit DPMI host
  4443.     CF clear if successful
  4444.         CS = 16-bit selector corresponding to real-mode CS
  4445.         SS = selector corresponding to real-mode SS (64K limit)
  4446.         DS = selector corresponding to real-mode DS (64K limit)
  4447.         ES = selector to program's PSP (100h byte limit)
  4448.         FS = GS = 0
  4449.         high word of ESP = 0 if 32-bit program
  4450.         program now in protected mode
  4451. Note:    this entry point is only called for the initial switch to protected
  4452.       mode
  4453. --------W-2F1688-----------------------------
  4454. INT 2F U - MS Windows 3.0, 386MAX v6.01 - GET SELECTOR TO LDT
  4455.     AX = 1688h
  4456. Return: AX = status??? (0000h for 386MAX)
  4457.     BX = selector for ???
  4458. --------W-2F1689-----------------------------
  4459. INT 2F U - MS Windows 3.0+ - KERNEL IDLE CALL
  4460.     AX = 1689h
  4461.     ???
  4462. Return: ???
  4463. SeeAlso: AX=1680h,INT 15/AX=1000h,INT 28
  4464. --------E-2F168A-----------------------------
  4465. INT 2F - DPMI 0.9+ - GET VENDOR-SPECIFIC API ENTRY POINT
  4466.     AX = 168Ah
  4467.     DS:(E)SI = selector:offset of ASCIZ vendor name
  4468. Return: AL = status
  4469.         00h successful
  4470.            ES:(E)DI -> extended API entry point
  4471.         8Ah unsuccessful
  4472. Notes:    the vendor name is used to determine which entry point to return; it is
  4473.       case-sensitive
  4474.     available in protected mode only
  4475.     32-bit applications use ESI and EDI, 16-bit applications use SI and DI
  4476.     this call is present but not documented for DPMI 0.9
  4477. SeeAlso: INT 31/AX=0A00h,INT 31/AH=57h
  4478.  
  4479. Vendor names:
  4480.  "MS-DOS"    ??? and 386MAX v6.00+
  4481.  "386MAX"    386MAX v6.00+
  4482.  "HELIX_DPMI"    Helix Netroom's DPMI server
  4483. --------W-2F168B-----------------------------
  4484. INT 2F - MS Windows 3.1 - SET FOCUS TO SPECIFIED VIRTUAL MACHINE
  4485.     AX = 168Bh
  4486.     BX = virtual machine ID (see AX=1683h)
  4487. Return: AL = 00h if focus set to specified VM
  4488. Note:    documented on the Microsoft Developer's Network CD-ROM
  4489. SeeAlso: AX=1683h
  4490. --------W-2F168C-----------------------------
  4491. INT 2F - MS Windows 3.1 - RESTART COMMAND
  4492.     AX = 168Ch
  4493.     ???
  4494. Return: ???
  4495. Note:    WIN.COM executes specified application
  4496. --------W-2F1700-----------------------------
  4497. INT 2F - MS Windows "WINOLDAP" - IDENTIFY WinOldAp VERSION
  4498.     AX = 1700h
  4499. Return: AX = 1700h if this version of WINOLDAP doesn't support clipboard
  4500.     AX <> 1700h
  4501.         AL = WINOLDAP major version
  4502.         AH = WINOLDAP minor version
  4503. Program: WinOldAp (WINOLDAP.MOD) is a Microsoft Windows extension supporting
  4504.       "old" (character-mode) application access to Dynamic Data Exchange,
  4505.       menus, and the Windows clipboard.
  4506. Note:    this installation check DOES NOT follow the format used by other
  4507.       software of returning AL=FFh
  4508. Index:    installation check;WINOLDAP
  4509. --------W-2F1701-----------------------------
  4510. INT 2F - MS Windows "WINOLDAP" - OPEN CLIPBOARD
  4511.     AX = 1701h
  4512. Return: AX <> 0     success
  4513.     AX = 0     clipboard is already open
  4514. --------W-2F1702-----------------------------
  4515. INT 2F - MS Windows "WINOLDAP" - EMPTY CLIPBOARD
  4516.     AX = 1702h
  4517. Return: AX <> 0     clipboard has been emptied
  4518.     AX = 0     failure
  4519. --------W-2F1703-----------------------------
  4520. INT 2F - MS Windows "WINOLDAP" - SET CLIPBOARD DATA
  4521.     AX = 1703h
  4522.     DX = clipboard format supported by WinOldAp:
  4523.         01h text
  4524.         02h bitmap
  4525.         03h metafile picture
  4526.         04h SYLK
  4527.         05h DIF
  4528.         06h TIFF
  4529.         07h OEM text
  4530.         81h DSP text
  4531.         82h DSP bitmap
  4532.     ES:BX -> data (see below)
  4533.     SI:CX = size of data
  4534. Return: AX <> 0 data copied into the Clipboard
  4535.     AX = 0 failure
  4536.  
  4537. Format of bitmap:
  4538. Offset    Size    Description
  4539.  00h    WORD    type (0000h)
  4540.  02h    WORD    width of bitmap in pixels
  4541.  04h    WORD    height of bitmap in pixels
  4542.  06h    WORD    bytes per line
  4543.  08h    BYTE    number of color planes
  4544.  09h    BYTE    number of adjacent color bits in pixel
  4545.  0Ah    DWORD    pointer to start of data
  4546.  0Eh    WORD    width in 0.1mm units
  4547.  10h    WORD    height in 0.1mm units
  4548.  12h  N BYTEs    bitmap data
  4549.  
  4550. Format of metafile picture:
  4551. Offset    Size    Description
  4552.  00h    WORD    mapping mode
  4553.  02h    WORD    X extent
  4554.  04h    WORD    Y extent
  4555.  06h    WORD    picture data
  4556. --------W-2F1704-----------------------------
  4557. INT 2F - MS Windows "WINOLDAP" - GET CLIPBOARD DATA SIZE
  4558.     AX = 1704h
  4559.     DX = clipboard format supported by WinOldAp (see AX=1703h)
  4560. Return:     DX:AX = size of data in bytes, including any headers
  4561. Failure: DX:AX = 0  no data in this format in the Clipboard
  4562. --------W-2F1705-----------------------------
  4563. INT 2F - MS Windows "WINOLDAP" - GET CLIPBOARD DATA
  4564.     AX = 1705h
  4565.     DX = clipboard format supported by WinOldAp (see AX=1703h)
  4566.     ES:BX -> buffer
  4567. Return: AX <> 0     success
  4568.     AX = 0     error, or no data in this format in Clipboard
  4569. --------W-2F1708-----------------------------
  4570. INT 2F - MS Windows "WINOLDAP" - CloseClipboard
  4571.     AX = 1708h
  4572. Return: AX <> 0 success
  4573.     AX = 0 failure
  4574. --------W-2F1709-----------------------------
  4575. INT 2F - MS Windows "WINOLDAP" - COMPACT CLIPBOARD
  4576.     AX = 1709h
  4577.     SI:CX = desired size in bytes
  4578. Return: DX:AX = number of bytes in largest block of free memory
  4579. Note:    WinOldAp is responsible for including the size of any headers
  4580. --------W-2F170A-----------------------------
  4581. INT 2F - MS Windows "WINOLDAP" - GET DEVICE CAPABILITIES
  4582.     AX = 170Ah
  4583.     DX = GDI information index
  4584.         00h device driver version
  4585.         02h device classification
  4586.         04h width in mm
  4587.         06h height in mm
  4588.         08h width in pixels
  4589.         0Ah height in pixels
  4590.         0Ch bits per pixel
  4591.         0Eh number of bit planes
  4592.         10h number of brushes supported by device
  4593.         12h number of pens supported by device
  4594.         14h number of markers supported by device
  4595.         16h number of fonts supported by device
  4596.         18h number of colors
  4597.         1Ah size required for device descriptor
  4598.         1Ch curve capabilities
  4599.         1Eh line capabilities
  4600.         20h polygon capabilities
  4601.         22h text capabilities
  4602.         24h clipping capabilities
  4603.         26h bitblt capabilities
  4604.         28h X aspect
  4605.         2Ah Y aspect
  4606.         2Ch length of hypotenuse of aspect
  4607.         58h logical pixels per inch of width
  4608.         5Ah logical pixels per inch of height
  4609. Return:     AX = integer value of the desired item (see below)
  4610. Note:  This function returns the device-capability bits for the given display
  4611.  
  4612. Values for device classification:
  4613.  00h    vector plotter
  4614.  01h    raster display
  4615.  02h    raster printer
  4616.  03h    raster camera
  4617.  04h    character-stream, PLP
  4618.  05h    Metafile, VDM
  4619.  06h    display-file
  4620.  
  4621. Bitfields for curve capabilities:
  4622.  bit 0    circles
  4623.  bit 1    pie wedges
  4624.  bit 2    chord arcs
  4625.  bit 3    ellipses
  4626.  bit 4    wide lines
  4627.  bit 5    styled lines
  4628.  bit 6    wide styled lines
  4629.  bit 7    interiors
  4630.  
  4631. Bitfields for line capabilities:
  4632.  bit 1    polylines
  4633.  bit 2    markers
  4634.  bit 3    polymarkers
  4635.  bit 4    wide lines
  4636.  bit 5    styled lines
  4637.  bit 6    wide styled lines
  4638.  bit 7    interiors
  4639.  
  4640. Bitfields for polygon capabilities:
  4641.  bit 0    polygons
  4642.  bit 1    rectangles
  4643.  bit 2    trapezoids
  4644.  bit 3    scanlines
  4645.  bit 4    wide borders
  4646.  bit 5    styled borders
  4647.  bit 6    wide styled borders
  4648.  bit 7    interiors
  4649.  
  4650. Bitfields for text capabilities:
  4651.  bit 0    output precision character
  4652.  bit 1    output precision stroke
  4653.  bit 2    clippping precision stroke
  4654.  bit 3    90-degree character rotation
  4655.  bit 4    arbitrary character rotation
  4656.  bit 5    independent X and Y scaling
  4657.  bit 6    double-size
  4658.  bit 7    integer scaling
  4659.  bit 8    continuous scaling
  4660.  bit 9    bold
  4661.  bit 10 italic
  4662.  bit 11 underline
  4663.  bit 12 strikeout
  4664.  bit 13 raster fonts
  4665.  bit 14 vector fonts
  4666.  bit 15 reserved
  4667.  
  4668. Values for clipping capabilities:
  4669.  00h    none
  4670.  01h    clipping to rectangles
  4671.  
  4672. Bitfields for raster capabilities:
  4673.  bit 0    simple bitBLT
  4674.  bit 1    device requires banding support
  4675.  bit 2    device requires scaling support
  4676.  bit 3    supports >64K bitmap
  4677. ----------2F18-------------------------------
  4678. INT 2F U - MS-Manager
  4679.     AH = 18h
  4680.     ???
  4681. Return: ???
  4682. --------l-2F1900-----------------------------
  4683. INT 2F U - DOS 4.x only SHELLB.COM - INSTALLATION CHECK
  4684.     AX = 1900h
  4685. Return: AL = 00h  not installed
  4686.          FFh  installed
  4687. --------l-2F1901BL00-------------------------
  4688. INT 2F U - DOS 4.x only SHELLB.COM - SHELLC.EXE INTERFACE
  4689.     AX = 1901h
  4690.     BL = 00h if SHELLC transient
  4691.          01h if SHELLC resident
  4692.     DS:DX -> far call entry point for resident SHELLC.EXE
  4693. Return: ES:DI -> SHELLC.EXE workspace within SHELLB.COM
  4694. Note:    SHELLB.COM and SHELLC.EXE are parts of the DOS 4.x shell
  4695. --------l-2F1902-----------------------------
  4696. INT 2F U - DOS 4.x only SHELLB.COM - COMMAND.COM INTERFACE
  4697.     AX = 1902h
  4698.     ES:DI -> ASCIZ full filename of current batch file, with at least the
  4699.          final filename element uppercased
  4700.     DS:DX -> buffer for results
  4701. Return: AL = 00h  failed, either
  4702.           (a) final filename element quoted at ES:DI does not match
  4703.               identity of shell batch file quoted as parameter of most
  4704.               recent call of SHELLB command, or
  4705.           (b) no more Program Start Commands available.
  4706.     AL= FFh     success, then:
  4707.         memory at DS:[DX+1] onwards filled as:
  4708.         DX+1:    BYTE    count of bytes of PSC
  4709.         DX+2: N BYTEs    Program Start Command text
  4710.             BYTE    0Dh terminator
  4711. Explanation: COMMAND.COM executes the result of this call in preference to
  4712.     reading a command from a batch file. Thus the batch file does not
  4713.     advance in execution for so long as SHELLB provides PSCs from its
  4714.     workspace. The PSCs are planted in SHELLB workspace by SHELLC, the user
  4715.     menu interface. The final PSC of a sequence is finished with a
  4716.     GOTO COMMON, which causes a loop back in the batch file which called
  4717.     SHELLC so as to execute SHELLC again. The check on batch file name
  4718.     permits PSCs to CALL nested batch files while PSCs are still stacked
  4719.     up for subsequent execution.
  4720. --------l-2F1903-----------------------------
  4721. INT 2F U - DOS 4.x only SHELLB.COM - COMMAND.COM interface
  4722.     AX = 1903h
  4723.     ES:DI -> ASCIZ batch file name as for AX=1902h
  4724. Return: AL = FFh if quoted batch file name matches last SHELLB parameter
  4725.     AL = 00h if it does not
  4726. --------l-2F1904-----------------------------
  4727. INT 2F U - DOS 4.x only SHELLB.COM - SHELLB transient to TSR intrface
  4728.     AX = 1904h
  4729. Return: ES:DI -> name of current shell batch file:
  4730.         WORD    number of bytes of name following
  4731.         BYTEs    (8 max) uppercase name of shell batch file
  4732. --------V-2F1A00-----------------------------
  4733. INT 2F - DOS 4+ ANSI.SYS - INSTALLATION CHECK
  4734.     AX = 1A00h
  4735. Return: AL = FFh if installed
  4736. Notes:    AVATAR.SYS also responds to this call
  4737.     documented for DOS 5+, but undocumented for DOS 4.x
  4738. --------V-2F1A00BX414E-----------------------
  4739. INT 2F - ANSIPLUS.SYS - INSTALLATION CHECK
  4740.     AX = 1A00h
  4741.     BX = 414Eh ('AN')
  4742.     CX = 5349h ('SI')
  4743.     DX = 2B2Bh ('++')
  4744. Return: AL = FFh if installed
  4745.         CF clear
  4746.         ES:BX -> INT 29 entry point
  4747. Program: ANSIPLUS.SYS is a CON device driver by Kristofer Sweger which
  4748.       replaces the normal ANSI.SYS is a more powerful version with many
  4749.       additional features
  4750. Note:    ANSIPLUS also identifies itself as ANSI.SYS if BX,CX, or DX differ
  4751.       from the magic values above
  4752. --------V-2F1A00BX4156-----------------------
  4753. INT 2F - AVATAR.SYS - INSTALLATION CHECK
  4754.     AX = 1A00h
  4755.     BX = 4156h ('AV')
  4756.     CX = 4154h ('AT')
  4757.     DX = 4152h ('AR')
  4758. Return: AL = FFh if installed
  4759.         CF clear
  4760.         BX = AVATAR protocol level supported
  4761.         CX = driver type
  4762.         0000h AVATAR.SYS
  4763.         4456h DVAVATAR.COM inside DESQview window
  4764.         DX = 0016h
  4765. Program: AVATAR.SYS is a CON replacement by George Adam Stanislav which
  4766.       interprets AVATAR command codes in the same way that ANSI interprets
  4767.       ANSI command codes
  4768. Notes:    AVATAR also identifies itself as ANSI.SYS if BX, CX, or DX differ from
  4769.       the magic values
  4770. --------V-2F1A01-----------------------------
  4771. INT 2F U - DOS 4+ ANSI.SYS internal - GET/SET DISPLAY INFORMATION
  4772.     AX = 1A01h
  4773.     CL = function
  4774.         7Fh for GET
  4775.         5Fh for SET
  4776.     DS:DX -> parm block as for INT 21,AX=440Ch,CX=037Fh/035Fh respectively
  4777. Return: CF set on error
  4778.         AX = error code (many non-standard)
  4779.     CF clear if successful
  4780.         AX destroyed
  4781. Note:    presumably this is the DOS IOCTL interface to ANSI.SYS
  4782. SeeAlso: AX=1A02h,INT 21/AX=440Ch
  4783. --------V-2F1A02-----------------------------
  4784. INT 2F U - DOS 4+ ANSI.SYS internal - MISCELLANEOUS REQUESTS
  4785.     AX = 1A02h
  4786.     DS:DX -> parameter block (see below)
  4787. Note:    DOS 5+ chains to previous handler if AL > 02h on call
  4788. SeeAlso: AX=1A01h
  4789.  
  4790. Format of parameter block:
  4791. Offset    Size    Description
  4792.  00h    BYTE    subfunction
  4793.         00h set/reset interlock
  4794.         01h get /L flag
  4795.  01h    BYTE    interlock state
  4796.         00h=reset, 01h=set
  4797.           This interlock prevents some of the ANSI.SYS post-processing
  4798.           in its hook onto INT 10, AH=00h mode set
  4799.  02h    BYTE    (returned)
  4800.         00h if /L not in effect
  4801.         01h if /L in effect
  4802. --------V-2F1A21-----------------------------
  4803. INT 2F - AVATAR.SYS - SET DRIVER STATE
  4804.     AX = 1A21h (AL='!')
  4805.     DS:SI -> command string with one or more state characters
  4806.     CX = length of command string
  4807. Return: CF set on error (invalid subfunction)
  4808.     CF clear if successful
  4809. Note:    the characters in the state string are interpreted left to right, and
  4810.       need not be in any particular order
  4811. SeeAlso: AX=1A3Fh
  4812.  
  4813. Values for state characters:
  4814.  'a'    activate driver
  4815.  'd'    disable driver
  4816.  'f'    use fast screen output
  4817.  'g'    always convert gray keys (+ and -) to function keys
  4818.  'G'    never convert gray keys
  4819.  'l'    convert gray keys only when ScrollLock active
  4820.  's'    use slow screen output
  4821.  't'    Tandy 1000 keyboard (not yet implemented)
  4822. --------V-2F1A3C-----------------------------
  4823. INT 2F U - AVATAR.SYS v0.11 - ???
  4824.     AX = 1A3Ch
  4825.     ???
  4826. Return: CX = 0000h
  4827. --------V-2F1A3E-----------------------------
  4828. INT 2F U - AVATAR.SYS v0.11 - ???
  4829.     AX = 1A3Eh
  4830.     CL = ???
  4831.     CH = ???
  4832.     DL = ???
  4833.     DH = ???
  4834. Return: CL = ???
  4835.     CH = ???
  4836.     DL = ???
  4837.     DH = ???
  4838. --------V-2F1A3F-----------------------------
  4839. INT 2F - AVATAR.SYS - QUERY DRIVER STATE
  4840.     AX = 1A3Fh (AL='?')
  4841.     ES:DI -> buffer
  4842.     CX = length of buffer in bytes
  4843. Return: CF clear
  4844.     CX = actual size of returned info
  4845. Note:    the returned information consists of multiple letters whose meanings
  4846.       are described under AX=1A21h
  4847. SeeAlso: AX=1A21h
  4848. --------S-2F1A42BX4156-----------------------
  4849. INT 2F - AVATAR Serial Dispatcher - INSTALL IRQ3 HANDLER
  4850.     AX = 1A42h
  4851.     BX = 4156h ('AV')
  4852.     ES:DI -> FAR handler for serial port using IRQ3
  4853.     DS = data segment needed by handler
  4854. Return: AX = 1A42h if ASD not installed
  4855.        = 0000h if no more room
  4856.        else handle to use when uninstalling
  4857. Notes:    the handler need not save/restore registers or signal EOI to the
  4858.       interrupt controller
  4859.     the handler should return AX=0000h if the interrupt was meant for it,
  4860.       and either leave AX unchanged or return a non-zero value otherwise
  4861.     the most recently installed handler will be called first, continuing
  4862.       to earlier handlers until one returns AX=0000h
  4863. SeeAlso: AX=1A43h,AX=1A62h
  4864. --------S-2F1A43BX4156-----------------------
  4865. INT 2F - AVATAR Serial Dispatcher - INSTALL IRQ4 HANDLER
  4866.     AX = 1A43h
  4867.     BX = 4156h ('AV')
  4868.     ES:DI -> FAR handler for serial port using IRQ4
  4869.     DS = data segment needed by handler
  4870. Return: AX = 1A43h if ASD not installed
  4871.        = 0000h if no more room
  4872.        else handle to use when uninstalling
  4873. Notes:    (see AX=1A42h)
  4874. SeeAlso: AX=1A42h,AX=1A63h
  4875. --------V-2F1A44BX4156-----------------------
  4876. INT 2F - AVATAR.SYS v0.11+ - GET DATA SEGMENT
  4877.     AX = 1A44h
  4878.     BX = 4156h ('AV')
  4879. Return: AX = 0000h
  4880.     DS = data segment
  4881.     CX = size of data segment
  4882. Note:    AVATAR.SYS calls this function whenever it is invoked.    If each
  4883.       process under a multitasker hooks this function and provides a
  4884.       separate data segment, AVATAR.SYS becomes fully reentrant.
  4885. SeeAlso: AX=1A21h,AX=1A3Fh
  4886. --------V-2F1A52-----------------------------
  4887. INT 2F U - AVATAR.SYS v0.11 - GET ???
  4888.     AX = 1A52h
  4889.     CX = size of buffer
  4890.     ES:DI -> buffer
  4891. Return: ??? copied into user buffer
  4892. Note:    the maximum size of the data which may be copied is returned by
  4893.       AX=1A72h
  4894. SeeAlso: AX=1A72h
  4895. --------V-2F1A53-----------------------------
  4896. INT 2F U - AVATAR.SYS v0.11 - ???
  4897.     AX = 1A53h
  4898.     CL = ??? (00h-05h)
  4899.     ???
  4900. Return: ???
  4901. --------S-2F1A62BX4156-----------------------
  4902. INT 2F - AVATAR Serial Dispatcher - UNINSTALL IRQ3 HANDLER
  4903.     AX = 1A62h
  4904.     BX = 4156h ('AV')
  4905.     CX = handle for IRQ routine returned by AX=1A42h
  4906. SeeAlso: AX=1A42h,AX=1A63h
  4907. --------S-2F1A63BX4156-----------------------
  4908. INT 2F - AVATAR Serial Dispatcher - UNINSTALL IRQ4 HANDLER
  4909.     AX = 1A63h
  4910.     BX = 4156h ('AV')
  4911.     CX = handle for IRQ routine returned by AX=1A43h
  4912. SeeAlso: AX=1A43h,AX=1A62h
  4913. --------V-2F1A72-----------------------------
  4914. INT 2F U - AVATAR.SYS v0.11 - GET ??? SIZE
  4915.     AX = 1A72h
  4916. Return: CX = maximum size of ???
  4917. SeeAlso: AX=1A52h
  4918. --------V-2F1A7B-----------------------------
  4919. INT 2F U - AVATAR.SYS v0.11 - ???
  4920.     AX = 1A7Bh
  4921. Return: AX = 0000h
  4922.     CX = 0000h
  4923. --------V-2F1A7D-----------------------------
  4924. INT 2F U - AVATAR.SYS v0.11 - ???
  4925.     AX = 1A7Dh
  4926. Return: AX = ???
  4927. --------V-2F1AADDX0000-----------------------
  4928. INT 2F U - AVATAR.SYS v0.11 - ???
  4929.     AX = 1AADh
  4930.     DX = 0000h
  4931.     CX = subfunction (00h-0Ch)
  4932.     ???
  4933. Return: AX = 0000h if DX was nonzero
  4934.     ???
  4935. --------m-2F1B00-----------------------------
  4936. INT 2F U - DOS 4+ XMA2EMS.SYS extension internal - INSTALLATION CHECK
  4937.     AX = 1B00h
  4938. Return: AL = FFh if installed
  4939. Note:    XMA2EMS.SYS extension is only installed if DOS has page frames to hide.
  4940.     This extension hooks onto INT 67/AH=58h and returns from that call data
  4941.       which excludes the physical pages being used by DOS.
  4942. SeeAlso: AH=1Bh"FRAME INFO"
  4943. --------m-2F1B-------------------------------
  4944. INT 2F U - DOS 4+ XMA2EMS.SYS extension internal - GET HIDDEN FRAME INFORMATION
  4945.     AH = 1Bh
  4946.     AL <> 00h
  4947.     DI = hidden physical page number
  4948. Return: AX = FFFFh if failed (no such hidden page)
  4949.     AX = 0000h if OK, then
  4950.          ES = segment of page frame
  4951.          DI = physical page number
  4952. Notes:    this corresponds to the data edited out of the INT 67/AH=58h call
  4953.     FASTOPEN makes this call with AL = FFh
  4954. SeeAlso: AX=1B00h
  4955. --------V-2F2300-----------------------------
  4956. INT 2F - DR-DOS 5.0 GRAFTABL - INSTALLATION CHECK
  4957.     AX = 2300h
  4958. Return: AH = FFh
  4959. Note:    this installation check does not follow the usual format
  4960. SeeAlso: AH=23h
  4961. --------V-2F23-------------------------------
  4962. INT 2F - DR-DOS 5.0 GRAFTABL - GET GRAPHICS DATA
  4963.     AH = 23h
  4964.     AL nonzero
  4965. Return: AH = FFh
  4966.     ES:BX -> graphics data
  4967. SeeAlso: AX=2300h
  4968. --------T-2F2700-----------------------------
  4969. INT 2F - DR-DOS 6.0 TaskMAX - INSTALLATION CHECK
  4970.     AX = 2700h
  4971. Return: AL = 00h not installed
  4972.        = FFh installed
  4973. --------T-2F2701-----------------------------
  4974. INT 2F - DR-DOS 6.0 TaskMAX - GET STATUS
  4975.     AX = 2701h
  4976. Return: AX = maximum simultaneous tasks
  4977.     BX = index into TASK_IDS of current foreground task
  4978.     CX = currently-active tasks
  4979.     DX = version number (DR-DOS 6.0 = 0001h)
  4980.     ES:SI -> TASK_IDS
  4981.     ES:DI -> name table (array of 8-byte names, NUL-terminated if <8 chars)
  4982. Notes:    do not attempt to create a new task if CX == AX
  4983.     the task's index is its position on the task menu, while its ID is the
  4984.       position within the internal task name table
  4985. SeeAlso: AX=2714h,AX=2716h
  4986. --------T-2F2702-----------------------------
  4987. INT 2F - DR-DOS 6.0 TaskMAX - GET PER-TASK EMS LIMIT
  4988.     AX = 2702h
  4989. Return: DX = maximum pages INT 67/AH=42h will report available
  4990. Note:    TaskMAX does not limit EMS allocations other than by limiting the
  4991.       amount which is reported as being available at a given time
  4992. SeeAlso: AX=2703h,INT 67/AH=42h
  4993. --------T-2F2703-----------------------------
  4994. INT 2F - DR-DOS 6.0 TaskMAX - SET PER-TASK EMS LIMIT
  4995.     AX = 2703h
  4996.     DX = maximum pages INT 67/AH=42h should report available
  4997. Return: DX = new maximum for reporting
  4998. SeeAlso: AX=2702h,INT 67/AH=42h
  4999. --------T-2F2704-----------------------------
  5000. INT 2F - DR-DOS 6.0 TaskMAX - REGISTER/UNREGISTER TASK MANAGER
  5001.     AX = 2704h
  5002.     DL = subfunction
  5003.         00h unregister task manager
  5004.         01h register task manager
  5005. Return: DL = status
  5006.         00h registered
  5007.         01h unregistered
  5008. Notes:    a task manager replaces TaskMAX's menu system with its own user
  5009.       interface; while one is registered, the TaskMAX hotkeys and
  5010.       Ctrl-Alt-Del invoke the manager rather than the built-in menu system
  5011.     unregister the task manager before terminating it
  5012. SeeAlso: AX=2705h
  5013. Index:    hotkeys;TaskMAX
  5014. --------T-2F2705-----------------------------
  5015. INT 2F - DR-DOS 6.0 TaskMAX - ENABLE/DISABLE DIRECT SWITCHING
  5016.     AX = 2705h
  5017.     DL = subfunction
  5018.         00h disable keystrokes for switching to next/prev/specified task
  5019.         01h enable
  5020. Return: nothing
  5021. Note:    should only be called by a registered task manager (see AX=2704h)
  5022. SeeAlso: AX=2704h,AX=2706h
  5023. --------T-2F2706-----------------------------
  5024. INT 2F - DR-DOS 6.0 TaskMAX - SWITCH TO SPECIFIED TASK
  5025.     AX = 2706h
  5026.     DX = task index (see AX=2701h) of task to be activated
  5027. Return: DX = task index of previously-active task
  5028. SeeAlso: AX=2705h,AX=2707h,AX=2715h
  5029. --------T-2F2707-----------------------------
  5030. INT 2F - DR-DOS 6.0 TaskMAX - CREATE NEW TASK
  5031.     AX = 2707h
  5032.     DS:DX -> ASCIZ pathname of executable
  5033.     ES:BX -> parameter block (see below)
  5034.     CX = number of ticks before automatic return to task manager
  5035.         (0000h = run until termination or explicitly switched)
  5036. Return: DX = new task's task index (FFFFh if task terminated)
  5037. SeeAlso: AX=2706h,AX=2708h
  5038.  
  5039. Format of parameter block:
  5040. Offset    Size    Description
  5041.  00h    WORD    reserved, should be 0000h
  5042.  02h    DWORD    pointer to command tail to be copied into child's PSP
  5043.  06h    DWORD    pointer to first FCB to be copied into child's PSP
  5044.  0Ah    DWORD    pointer to second FCB to be copied into child's PSP
  5045. --------T-2F2708-----------------------------
  5046. INT 2F - DR-DOS 6.0 TaskMAX - DELETE TASK
  5047.     AX = 2708h
  5048.     DX = task index
  5049. Return: DX = FFFFh (task deleted)
  5050. Notes:    this call should only be used for abnormal task termination, after
  5051.       first checking for open files with AX=270Ch; should not be used
  5052.       with programs that allocate EMS or XMS memory
  5053.     switches to specified task first
  5054. SeeAlso: AX=2707h
  5055. --------T-2F2709-----------------------------
  5056. INT 2F - DR-DOS 6.0 TaskMAX - NAME TASK
  5057.     AX = 2709h
  5058.     DX = task index
  5059.     DS:SI -> 8-byte name (8 NULs = remove name)
  5060. Return: AL = task flags
  5061.         00h ID unused or task terminated
  5062.         01h ID in use, task name table entry valid
  5063.         81h ID in use, task name fixed
  5064.     BX = task ID
  5065.     ES:DI -> name in task name table (see AX=2701h)
  5066. Note:    the task retains the given name until it terminates or the name is
  5067.       removed by specifying a name of 8 NULs.
  5068. SeeAlso: AX=2701h,AX=2707h
  5069. --------T-2F270A-----------------------------
  5070. INT 2F - DR-DOS 6.0 TaskMAX - CONVERT TASK INDEX TO TASK ID
  5071.     AX = 270Ah
  5072.     DX = task index
  5073. Return: DX = task ID (FFFFh if index invalid)
  5074. Note:    task IDs stay constant, while indexes can change when other tasks are
  5075.       deleted
  5076. SeeAlso: AX=2701h,AX=270Bh
  5077. --------T-2F270B-----------------------------
  5078. INT 2F - DR-DOS 6.0 TaskMAX - CONVERT TASK ID TO TASK INDEX
  5079.     AX = 270Bh
  5080.     DX = task ID
  5081. Return: DX = task index (FFFFh if task not active)
  5082. SeeAlso: AX=270Ah
  5083. --------T-2F270C-----------------------------
  5084. INT 2F - DR-DOS 6.0 TaskMAX - CHECK OPEN FILES
  5085.     AX = 270Ch
  5086.     DX = task index
  5087. Return: AX = number of files currently open for specified task
  5088. SeeAlso: AX=2708h
  5089. --------T-2F270D-----------------------------
  5090. INT 2F - DR-DOS 6.0 TaskMAX - CHECK IF TASK RUNNING PRIMARY COMMAND INTERPRETER
  5091.     AX = 270Dh
  5092.     DX = task index
  5093. Return: DX = status
  5094.         0000h if primary command interpreter (COMMAND.COM, etc.) running
  5095.         0001h if not in root shell for task
  5096. Note:    TaskMAX will return 0001h if the specified task has spawned another
  5097.       command interpreter with AX=2707h
  5098. SeeAlso: AX=2707h,AX=270Ch
  5099. --------T-2F270E-----------------------------
  5100. INT 2F - DR-DOS 6.0 TaskMAX - GET/SET TEXT PASTE LEAD-IN
  5101.     AX = 270Eh
  5102.     CX = length of string (max 15 keystrokes, 0000h to get current string)
  5103.     DS:SI -> pasting lead-in string (character/scan-code pairs)
  5104. Return: ES:DI -> current lead-in string
  5105. Note:    the specified sequence of keystrokes is sent to the application before
  5106.       every line of a text-mode spreadsheet paste
  5107. SeeAlso: AX=270Fh,AX=2710h,AX=2713h
  5108. --------T-2F270F-----------------------------
  5109. INT 2F - DR-DOS 6.0 TaskMAX - GET/SET NUMERIC PASTE LEAD-IN
  5110.     AX = 270Fh
  5111.     CX = length of string (max 15 keystrokes, 0000h to get current string)
  5112.     DS:SI -> pasting lead-in string (character/scan-code pairs)
  5113. Return: ES:DI -> current lead-in string
  5114. Note:    the specified sequence of keystrokes is sent to the application before
  5115.       every number in a numeric-mode spreadsheet paste
  5116. SeeAlso: AX=270Eh,AX=2710h,AX=2711h,AX=2713h
  5117. --------T-2F2710-----------------------------
  5118. INT 2F - DR-DOS 6.0 TaskMAX - GET/SET PASTE LINE TERMINATOR STRING
  5119.     AX = 2710h
  5120.     CX = length of string (max 15 keystrokes, 0000h to get current string)
  5121.     DS:SI -> pasting lead-in string (character/scan-code pairs)
  5122. Return: ES:DI -> current lead-in string
  5123. Note:    the specified sequence of keystrokes is sent to the application after
  5124.       every line of a spreadsheet paste operation
  5125. SeeAlso: AX=270Eh,AX=270Fh,AX=2713h
  5126. --------T-2F2711-----------------------------
  5127. INT 2F - DR-DOS 6.0 TaskMAX - GET/SET NUMERIC PASTE DECIMAL POINT
  5128.     AX = 2711h
  5129.     DX = ASCII code for separator (FFFFh to get current)
  5130. Return: DL = current separator character
  5131. SeeAlso: AX=270Fh
  5132. --------T-2F2712-----------------------------
  5133. INT 2F - DR-DOS 6.0 TaskMAX - INITIATE EXPORTING TASK DATA
  5134.     AX = 2712h
  5135.     DX = task index
  5136. --------T-2F2713-----------------------------
  5137. INT 2F - DR-DOS 6.0 TaskMAX - INITIATE PASTE OPERATION
  5138.     AX = 2713h
  5139.     DX = task index
  5140.     CX = past mode
  5141.         0000h alphanumeric
  5142.         0001h numeric
  5143.         0002h text
  5144. SeeAlso: AX=270Eh,AX=270Fh,AX=2710h,AX=2711h
  5145. --------T-2F2714-----------------------------
  5146. INT 2F - DR-DOS 6.0 TaskMAX - GET SWAP SPACE INFO
  5147.     AX = 2714h
  5148. Return: CX = total KB of swap space
  5149.     DX = available KB of swap space
  5150. SeeAlso: AX=2701h
  5151. --------T-2F2715-----------------------------
  5152. INT 2F - DR-DOS 6.0 TaskMAX - SWITCH TO TASK MANAGER
  5153.     AX = 2715h
  5154. Return: only after calling task is again selected
  5155. SeeAlso: AX=2706h
  5156. --------T-2F2716-----------------------------
  5157. INT 2F - DR-DOS 6.0 TaskMAX - GET PASTE BUFFER STATUS
  5158.     AX = 2716h
  5159. Return: AX = 0000h if AX=2716h,AX=2717h,AX=2718h supported
  5160.         CX = bytes in paste buffer
  5161.         DX = current generation number (updated after every copy operation)
  5162. SeeAlso: AX=2701h,AX=2713h,AX=2714h,AX=2717h,AX=2718h
  5163. --------T-2F2717-----------------------------
  5164. INT 2F - DR-DOS 6.0 TaskMAX - PASTE DATA DIRECTLY TO APPLICATION BUFFER
  5165.     AX = 2717h
  5166.     CX = bytes in destination buffer
  5167.     ES:DI -> destination buffer
  5168. Return: AX = 0000h if function supported
  5169.         CX = bytes actually copied (FFFFh if buffer too small)
  5170.         DX = current generation number for paste buffer
  5171. Note:    the destination buffer may be too small if another task adds more data
  5172.       to the paste buffer after the AX=2716h call but before this call
  5173. SeeAlso: AX=2713h,AX=2716h,AX=2718h
  5174. --------T-2F2718-----------------------------
  5175. INT 2F - DR-DOS 6.0 TaskMAX - COPY DATA DIRECTLY INTO PASTE BUFFER
  5176.     AX = 2718h
  5177.     CX = bytes in source buffer
  5178.     DS:SI -> source buffer (plain ASCII, lines terminated with CR LF)
  5179. Return: AX = 0000h if function supported
  5180.         CX = bytes actually copied
  5181.         DX = current generation number for paste buffer
  5182. SeeAlso: AX=2712h,AX=2716h,AX=2717h
  5183. --------F-2F2A-------------------------------
  5184. INT 2F - Gammafax DOS Dispatcher INTERFACE
  5185.     AH = 2Ah
  5186. Note:    details not available at this time
  5187. SeeAlso: AX=8000h"FaxBIOS",AX=C000h"MTEZ",AX=CB00h,AX=CBDDh,INT 66"BitFax"
  5188. --------t-2F3900-----------------------------
  5189. INT 2F - Kingswood TSR INTERFACE - COMPATIBILITY MODE
  5190.     AX = 3900h
  5191. Return: AL = status
  5192.         00h not installed
  5193.         FFh one or more TSRs using this interface is installed
  5194. Note:    this function is provided to that the multiplex number will appear used
  5195.       to other programs
  5196. SeeAlso: AH=39h/BL=00h
  5197. --------t-2F39--BL00-------------------------
  5198. INT 2F - Kingswood TSR INTERFACE - INSTALLATION CHECK
  5199.     AH = 39h
  5200.     BL = 00h
  5201.     AL = TSR ID number (01h-FFh, currently only 01h-0Eh used) (see below)
  5202. Return: AL = status
  5203.         00h not installed
  5204.         FFh installed
  5205.         DX = segment address of resident module
  5206. Note:    All of Kingswood Software's TSRs use this interface.  Usually the
  5207.       resident module is installed by allocating a block of upper memory,
  5208.       setting its owner ID to 0008h (DOS data), and filling the MCB name
  5209.       field with the TSR's name.
  5210. SeeAlso: AX=3900h,AH=39h/BL=01h
  5211.  
  5212. Values for TSR ID number:
  5213.  01h    TSR Windows
  5214.  02h    NOBUSY
  5215.  03h    CD STACK
  5216.  04h    DISK WATCH
  5217.  05h    PUSHBP
  5218.  06h    ALIAS
  5219.  07h    KEYMACRO
  5220.  08h    SLOWDOWN
  5221.  09h    ANSIGRAB
  5222.  0Ah    TEE
  5223.  0Bh    FASTMOUS
  5224.  0Ch    EXTWILD
  5225.  0Dh    BREAKOUT
  5226.  0Eh    STOPDISK
  5227.  
  5228. Format of TSR modules:
  5229. Offset    Size    Description
  5230.  00h  4 BYTEs    signature "FTSR"
  5231.  04h    WORD    segment address of this module
  5232.  06h    WORD    number of words to skip (usually 0000h if no PSP present)
  5233.  08h  N WORDs    module-defined data that must be at a fixed segment offset
  5234.         (usually only a PSP if file access is required)
  5235.      5N BYTEs    interrupt list (see below)
  5236.     BYTE    FFh terminator
  5237.  
  5238. Format of interrupt list entry:
  5239. Offset    Size    Description
  5240.  00h    BYTE    interrupt number (00h-FEh)
  5241.  01h    WORD    offset within segment of DWORD pointer to previous interrupt
  5242.  03h    WORD    offset within segment of begin of interrupt handler code
  5243. --------t-2F39--BL01-------------------------
  5244. INT 2F - Kingswood TSR INTERFACE - REMOVAL CHECK
  5245.     AH = 39h
  5246.     BL = 01h
  5247.     AL = TSR ID number (01h-FFh) (see AH=39h/BL=00h)
  5248. Return: AL = status
  5249.         00h not ready to be removed
  5250.         FFh resident module may be removed by deassigning the interrupts
  5251.         hooked by the TSR and deallocating the TSR's memory block
  5252.     AH,BX,CX,DX,ES may be destroyed
  5253. SeeAlso: AX=3900h,AH=39h/BL=00h
  5254. --------t-2F39-------------------------------
  5255. INT 2F - Kingswood TSR INTERFACE - APPLICATION-SPECIFIC FUNCTION CALLS
  5256.     AH = 39h
  5257.     BL = function number (02h-FFh)
  5258.     AL = TSR ID number (01h-FFh)
  5259.     CX,DX,SI,DI,DS,ES may contain parameters
  5260. Return: as appropriate for the called function
  5261. SeeAlso: AX=3900h,AH=39h/BL=00h,AX=3901h/BL=02h
  5262. --------r-2F3901BL02-------------------------
  5263. INT 2F - Kingswood TSR Windows - OPEN WINDOW
  5264.     AX = 3901h
  5265.     BL = 02h
  5266. Return: AX = error code (0000h if successful)
  5267. Notes:    opens the next TSR window on top of any others.     Only three
  5268.       TSR windows can be opened at any one time.  The three windows
  5269.       are all 40x11 characters, partly overlapping.
  5270. SeeAlso: AH=39h/BL=00h,AX=3901h/BL=03h,AX=3901h/BL=05h,AX=3901h/BL=06h
  5271. --------r-2F3901BL03-------------------------
  5272. INT 2F - Kingswood TSR Windows - HIDE WINDOWS
  5273.     AX = 3901h
  5274.     BL = 03h
  5275. Return: AX = error code (0000h if successful)
  5276. Notes:    Hide any visible TSR windows from view.
  5277. SeeAlso: AH=39h/BL=00h,AX=3901h/BL=02h,AX=3901h/BL=05h
  5278. --------r-2F3901BL04-------------------------
  5279. INT 2F - Kingswood TSR Windows - SHOW WINDOWS
  5280.     AX = 3901h
  5281.     BL = 04h
  5282. Return: AX = error code (0000h if successful)
  5283. Notes:    Re-display all TSR windows after a HIDE WINDOWS call.
  5284. SeeAlso: AH=39h/BL=00h,AX=3901h/BL=02h,AX=3901h/BL=03h
  5285. --------r-2F3901BL05-------------------------
  5286. INT 2F - Kingswood TSR Windows - CLOSE WINDOW
  5287.     AX = 3901h
  5288.     BL = 05h
  5289. Return: AX = error code (0000h if successful)
  5290. Notes:    Close the last opened TSR window.
  5291. SeeAlso: AH=39h/BL=00h,AX=3901h/BL=02h
  5292. --------r-2F3901BL06-------------------------
  5293. INT 2F - Kingswood TSR Windows - SET WINDOW TITLE
  5294.     AX = 3901h
  5295.     BL = 06h
  5296.     DS:SI -> title string
  5297. Return: AX = error code (0000h if successful)
  5298. SeeAlso: AH=39h/BL=00h,AX=3901h/BL=02h
  5299. --------r-2F3901BL07-------------------------
  5300. INT 2F - Kingswood TSR Windows - POSITION CURSOR
  5301.     AX = 3901h
  5302.     BL = 07h
  5303.     CH = Y coordinate (0-10)
  5304.     CL = X coordinate (0-39)
  5305. Return: AX = error code (0000h if successful)
  5306. Note:    the hardware cursor is always disabled when a TSR window is opened;
  5307.       this call only sets a text position
  5308. SeeAlso: AH=39h/BL=00h,AX=3901h/BL=08h,AX=3901h/BL=09h
  5309. --------r-2F3901BL08-------------------------
  5310. INT 2F - Kingswood TSR Windows - DISPLAY STRING
  5311.     AX = 3901h
  5312.     BL = 08h
  5313.     DS:SI -> string
  5314. Return: AX = error code (0000h if successful)
  5315. Notes:    The text is not clipped.
  5316.     This routine understands Tab, NewLine and Carriage Return
  5317. SeeAlso: AH=39h/BL=00h,AX=3901h/BL=07h
  5318. --------r-2F3901BL09-------------------------
  5319. INT 2F - Kingswood TSR Windows - SCROLL WINDOW
  5320.     AX = 3901h
  5321.     BL = 09h
  5322.     CL = scroll direction: 00h up, FFh down, 00h clear window
  5323. Return: AX = error code (0000h if successful)
  5324. SeeAlso: AH=39h/BL=00h,AX=3901h/BL=07h
  5325. --------r-2F3901BL0A-------------------------
  5326. INT 2F - Kingswood TSR Windows - SOUND BEEPER
  5327.     AX = 3901h
  5328.     BL = 0Ah
  5329.     DX = sound divisor, or 0 for silence.
  5330.          (divide 1843200 by required frequency to get value for DX)
  5331.     CL = sound length in 18.2 Hz clock ticks
  5332. Return: AX = error code (0000h if successful)
  5333. SeeAlso: AH=39h/BL=00h
  5334. --------r-2F3901BL0B-------------------------
  5335. INT 2F - Kingswood TSR Windows - ADD OR REMOVE USER
  5336.     AX = 3901h
  5337.     BL = 0Bh
  5338.     CL = number of users increment: +1 if adding a new user
  5339.                     -1 if removing a user
  5340. Return: AX = error code (0000h if successful)
  5341. Note:    the TSR windows resident module may only be removed when the internal
  5342.       user count is zero
  5343. SeeAlso: AH=39h/BL=00h,AX=3901h/BL=02h
  5344. --------W-2F4000-----------------------------
  5345. INT 2F - Windows 3.x (OS/2 2.x???) - GET VIRTUAL DEVICE DRIVER (VDD) CAPABLTIES
  5346.     AX = 4000h
  5347. Return: AL = 01h does not virtualize video access
  5348.          02h virtualizes the video when in text mode
  5349.          03h virtualizes the video when in text mode or single plane
  5350.          graphics modes
  5351.          04h virtualizes the video when in text mode, single plane
  5352.          graphics modes, and VGA multiplane modes
  5353.          FFh virtualizes the video fully
  5354. Note:    this function is used by display drivers to find out what capabilities
  5355.       exist for the VDD driver and also trigger then VDD driver to call
  5356.       functions 4005h and 4006h.  This function also gives the Video Driver
  5357.       hardware access to the video registers.
  5358. --------O-2F4001-----------------------------
  5359. INT 2F C - OS/2 compatibility box - SWITCHING DOS TO BACKGROUND
  5360.     AX = 4001h
  5361. Note:    called by OS/2 when the DOS box is about to be placed in the background
  5362.       and the video driver should save any necessary state
  5363. SeeAlso: AX=4002h,AX=4005h
  5364. --------O-2F4002-----------------------------
  5365. INT 2F C - OS/2 compatibility box - SWITCHING DOS TO FOREGROUND
  5366.     AX = 4002h
  5367. Note:    called by OS/2 when the DOS box is about to be placed in the foreground
  5368.       and the video driver should restore the previously-saved state
  5369. SeeAlso: AX=4001h,AX=4006h
  5370. --------W-2F4003-----------------------------
  5371. INT 2F - Windows 3.x - ENTERING VIDEO DRIVER CRITICAL SECTION
  5372.     AX = 4003h
  5373. Note:    This critical section must be exited within 1 second.
  5374. SeeAlso: AX=4004h
  5375. --------W-2F4004-----------------------------
  5376. INT 2F - Windows 3.x - EXITING VIDEO DRIVER CRITICAL SECTION
  5377.     AX = 4004h
  5378. SeeAlso: AX=4003h
  5379. --------W-2F4005-----------------------------
  5380. INT 2F C - Windows 3.x - SWITCHING DOS TO BACKGROUND
  5381.     AX = 4005h
  5382. Note:    called by Windows when the DOS box is about to be placed in the
  5383.       background and the video driver should save any necessary state
  5384.       information
  5385. SeeAlso: AX=4001h,AX=4006h
  5386. --------W-2F4006-----------------------------
  5387. INT 2F C - Windows 3.x - SWITCHING DOS TO FOREGROUND
  5388.     AX = 4006h
  5389. Note:    called by Windows when the DOS box is about to be placed in the
  5390.       foreground and the video driver should restore any necessary state
  5391.       information
  5392. SeeAlso: AX=4002h,AX=4005h
  5393. --------W-2F4007-----------------------------
  5394. INT 2F - Windows 3.x - ENABLE VDD TRAPPING OF VIDEO REGISTERS
  5395.     AX = 4007h
  5396. Note:    used by Windows Standard mode
  5397. --------E-2F4040-----------------------------
  5398. INT 2F - PharLap 286|DOS-Extender Lite v2.5 - ???
  5399.     AX = 4040h
  5400. Return: BX:CX -> ???
  5401. --------N-2F4100-----------------------------
  5402. INT 2F - DOS Enhanced LAN Manager 2.0+ MINIPOP/NETPOPUP - INSTALLATION CHECK
  5403.     AX = 4100h
  5404. Return: CF clear if successful
  5405.         AL = FFh
  5406.     CF set on error
  5407.         AX = ???
  5408. Notes:    MINIPOP and NETPOPUP provide a network message popup service
  5409.     LAN Manager enhanced mode adds features beyond the standard redirector
  5410.       file/printer services
  5411. SeeAlso: AX=118Ah,AX=4103h,AX=4104h,AH=42h,AH=4Bh
  5412. --------N-2F4103-----------------------------
  5413. INT 2F - DOS Enhanced LAN Manager 2.0+ MINIPOP/NETPOPUP - ???
  5414.     AX = 4103h
  5415. Return: ???
  5416. SeeAlso: AX=4100h,AX=4104h
  5417. --------N-2F4104-----------------------------
  5418. INT 2F - DOS Enhanced LAN Manager 2.0+ MINIPOP/NETPOPUP - ???
  5419.     AX = 4104h
  5420. Return: ???
  5421. SeeAlso: AX=4100h,AX=4103h
  5422. --------N-2F42-------------------------------
  5423. INT 2F - LAN Manager 2.0 DOS Enhanced MSRV.EXE - MESSENGER SERVICE
  5424.     AH = 42h
  5425.     ???
  5426. Return: ???
  5427. Note:    LAN Manager enhanced mode adds features beyond the standard redirector
  5428.       file/printer services
  5429. SeeAlso: AX=118Ah,AX=4100h,AH=4Bh
  5430. --------m-2F4300-----------------------------
  5431. INT 2F - EXTENDED MEMORY SPECIFICATION (XMS) v2+ - INSTALLATION CHECK
  5432.     AX = 4300h
  5433. Return: AL = 80h XMS driver installed
  5434.     AL <> 80h no driver
  5435. Notes:    XMS gives access to extended memory and noncontiguous/nonEMS memory
  5436.       above 640K
  5437.     this installation check DOES NOT follow the format used by other
  5438.       software
  5439. SeeAlso: AX=4310h
  5440. Index:    installation check;XMS version 2+
  5441. --------m-2F4308-----------------------------
  5442. INT 2F U - HIMEM.SYS v2.77+ - GET A20 HANDLER NUMBER
  5443.     AX = 4308h
  5444. Return: AL = 43h if supported
  5445.         BL = A20 handler number (value of /MACHINE:nn switch)
  5446.         BH = AT A20 switch time (00h medium, 01h fast, 02h slow)
  5447. SeeAlso: AX=4309h,AX=4330h
  5448. --------m-2F4309-----------------------------
  5449. INT 2F U - HIMEM.SYS v3.09+ - GET XMS HANDLE TABLE
  5450.     AX = 4309h
  5451. Return: AL = 43h if function supported
  5452.         ES:BX -> XMS handle table (see below)
  5453. Note:    HIMEM.SYS v3.09 is part of MS-DOS 6.0.
  5454. SeeAlso: AX=4308h
  5455.  
  5456. Format of XMS handle table:
  5457. Offset    Size    Description
  5458.  00h    BYTE    ??? (01h in HIMEM.SYS v3.09)
  5459.  01h    BYTE    size of one handle??? (0Ah in HIMEM.SYS v3.09)
  5460.  02h    WORD    value of /numhandles= parameter (default = 20h)
  5461.  04h    DWORD    pointer to XMS handle array (see below)
  5462.  
  5463. Format of XMS handle [array]:
  5464. Offset    Size    Description
  5465.  00h    BYTE    flag 01h=free, 02h=used, 04h=unused
  5466.  01h    BYTE    lock 00h=unlocked, 01h=locked
  5467.  02h    DWORD    address of XMS block in KB (shift left by 10 for abs. address)
  5468.  06h    DWORD    size of XMS block in KB
  5469. --------m-2F4310-----------------------------
  5470. INT 2F - EXTENDED MEMORY SPECIFICATION (XMS) v2+ - GET DRIVER ADDRESS
  5471.     AX = 4310h
  5472. Return: ES:BX -> driver entry point
  5473. Note:    HIMEM.SYS v2.77 chains to previous handler if AH is not 00h or 10h
  5474. SeeAlso: AX=4300h
  5475.  
  5476. Perform a FAR call to the driver entry point with AH set to the function code
  5477.     AH    function
  5478.     00h  Get XMS version number
  5479.          Return: AX = XMS version (in BCD, AH=major, AL=minor)
  5480.              BX = internal revision number
  5481.              DX = 0001h if HMA (1M to 1M + 64K) exists
  5482.               0000h if HMA does not exist
  5483.     01h  Request High Memory Area (1M to 1M + 64K)
  5484.          DX = memory in bytes (for TSR or device drivers)
  5485.           FFFFh if application program
  5486.          Return: AX = 0001h success
  5487.             = 0000h failure
  5488.                BL = error code (80h,81h,90h,91h,92h) (see below)
  5489.     02h  Release High Memory Area
  5490.          Return: AX = 0001h success
  5491.             = 0000h failure
  5492.                BL = error code (80h,81h,90h,93h) (see below)
  5493.     03h  Global enable A20, for using the HMA
  5494.          Return: AX = 0001h success
  5495.             = 0000h failure
  5496.                BL = error code (80h,81h,82h) (see below)
  5497.     04h  Global disable A20
  5498.          Return: AX = 0001h success
  5499.             = 0000h failure
  5500.                BL = error code (80h,81h,82h,94h) (see below)
  5501.     05h  Local enable A20, for direct access to extended memory
  5502.          Return: AX = 0001h success
  5503.             = 0000h failure
  5504.                BL = error code (80h,81h,82h) (see below)
  5505.     06h  Local disable A20
  5506.          Return: AX = 0001h success
  5507.             = 0000h failure
  5508.                BL = error code (80h,81h,82h,94h) (see below)
  5509.     07h  Query A20 state
  5510.          Return: AX = 0001h enabled
  5511.             = 0000h disabled
  5512.              BL = error code (00h,80h,81h) (see below)
  5513.     08h  Query free extended memory, not counting HMA
  5514.          BL = 00h (some implementations leave BL unchanged on success)
  5515.          Return: AX = size of largest extended memory block in KB
  5516.              DX = total extended memory in KB
  5517.              BL = error code (00h,80h,81h,A0h) (see below)
  5518.     09h  Allocate extended memory block
  5519.          DX = Kbytes needed
  5520.          Return: AX = 0001h success
  5521.                DX = handle for memory block
  5522.             = 0000h failure
  5523.                BL = error code (80h,81h,A0h) (see below)
  5524.     0Ah  Free extended memory block
  5525.          DX = handle of block to free
  5526.          Return: AX = 0001h success
  5527.             = 0000h failure
  5528.                BL = error code (80h,81h,A2h,ABh) (see below)
  5529.     0Bh  Move extended memory block
  5530.          DS:SI -> EMM structure (see below)
  5531.          Note: if either handle is 0000h, the corresponding offset is
  5532.            considered to be an absolute segment:offset address in
  5533.            directly addressable memory
  5534.          Return: AX = 0001h success
  5535.             = 0000h failure
  5536.                BL = error code (80h-82h,A3h-A9h) (see below)
  5537.     0Ch  Lock extended memory block
  5538.          DX = handle of block to lock
  5539.          Return: AX = 0001h success
  5540.                DX:BX = 32-bit linear address of locked block
  5541.             = 0000h failure
  5542.                BL = error code (80h,81h,A2h,ACh,ADh) (see below)
  5543.     0Dh  Unlock extended memory block
  5544.          DX = handle of block to unlock
  5545.          Return: AX = 0001h success
  5546.             = 0000h failure
  5547.                BL = error code (80h,81h,A2h,AAh) (see below)
  5548.     0Eh  Get handle information
  5549.          DX = handle for which to get info
  5550.          Return: AX = 0001h success
  5551.                BH = block's lock count
  5552.                BL = number of free handles left
  5553.                DX = block size in KB
  5554.             = 0000h failure
  5555.                BL = error code (80h,81h,A2h) (see below)
  5556.     0Fh  Reallocate extended memory block
  5557.          DX = handle of block
  5558.          BX = new size of block in KB
  5559.          Return: AX = 0001h success
  5560.             = 0000h failure
  5561.                BL = error code (80h,81h,A0h-A2h,ABh) (see below)
  5562.     10h  Request upper memory block (nonEMS memory above 640K)
  5563.          DX = size of block in paragraphs
  5564.          Return: AX = 0001h success
  5565.                BX = segment address of UMB
  5566.                DX = actual size of block
  5567.             = 0000h failure
  5568.                BL = error code (80h,B0h,B1h) (see below)
  5569.                DX = largest available block
  5570.     11h  Release upper memory block
  5571.          DX = segment address of UMB to release
  5572.          Return: AX = 0001h success
  5573.             = 0000h failure
  5574.                BL = error code (80h,B2h) (see below)
  5575.     12h  (XMS v3.0) Reallocate upper memory block
  5576.          DX = segment address of UMB to resize
  5577.          BX = new size of block in paragraphs
  5578.          Return: AX = 0001h success
  5579.             = 0000h failure
  5580.                BL = error code (80h,B0h,B2h) (see below)
  5581.                DX = maximum available size (RM386)
  5582.     34h  (QEMM 5.11 only, undocumented) ???
  5583.     44h  (QEMM 5.11 only, undocumented) ???
  5584.     80h  (Netroom RM386 v6.00) Reallocate upper memory block
  5585.          this function is identical to function 12h
  5586.     81h  (Netroom RM386 v6.00) re-enable HMA allocation
  5587.          Return: AX = 0001h (success)
  5588.     82h  (Netroom RM386 v6.00) Cloaking API
  5589.          DX = XMS handle of block containing protected-mode code
  5590.          CL = code size (00h 16-bit, else 32-bit)
  5591.          ESI, EDI = parameters to pass to protected-mode code
  5592.          Return: AX = status
  5593.              0001h success
  5594.              0000h failed
  5595.                  BL = error code (A2h,B0h) (see below)
  5596.          Note: this calls offset 0 in the XMS memory block with
  5597.         EBX = physical address of block's start
  5598.         CS = code selector for XMS block at EBX (16-bit or 32-bit)
  5599.         DS = data selector for XMS block, starting at EBX
  5600.         ES = selector for V86 memory access to full real-mode 1088K
  5601.         GS = selector for full flat address space
  5602.         ESI, EDI from V86 mode
  5603.     83h  (Netroom RM386 v6.00) Create new UMB entry
  5604.          BX = segment of high-memory block
  5605.          DX = first page of start of block
  5606.          CX = number of consecutive pages in block
  5607.          DI = start of UMB in block
  5608.          Return: AX = 0001h (success)
  5609.              DI = segment of first high-DOS block
  5610.          Note: the new UMB is not linked into the high-memory chain
  5611.     84h  (Netroom RM386 v6.00) Get all XMS handles info
  5612.          CX = size of buffer for handle info
  5613.          ES:DI -> buffer for handle info (see below)
  5614.          Return: AX = 0001h (success)
  5615.              DX = current number of allocated XMS handles
  5616.     88h  (XMS v3.0) Query free extended memory
  5617.          Return: EAX = largest block of extended memory, in KB
  5618.              BL = status
  5619.              00h success
  5620.              80h not implemented (i.e. on a 286 system)
  5621.              81h VDISK detected
  5622.              A0h all extended memory allocated
  5623.              ECX = physical address of highest byte of memory
  5624.                 (valid even on error codes 81h and A0h)
  5625.              EDX = total Kbytes of extended memory (0 if status A0h)
  5626.     89h  (XMS v3.0) Allocate any extended memory
  5627.          EDX = Kbytes needed
  5628.          Return: AX = 0001h success
  5629.                 DX = handle for allocated block (free with AH=0Ah)
  5630.             = 0000h failure
  5631.                 BL = status (80h,81h,A0h,A1h,A2h) (see below)
  5632.     8Eh  (XMS v3.0) Get extended EMB handle information
  5633.          DX = handle
  5634.          Return: AX = 0001h success
  5635.                 BH = block's lock count
  5636.                 CX = number of free handles left
  5637.                 EDX = block size in KB
  5638.             = 0000h failure
  5639.                 BL = status (80h,81h,A2h) (see below)
  5640.     8Fh  (XMS v3.0) Reallocate any extended memory block
  5641.          DX = unlocked handle
  5642.          EBX = new size in KB
  5643.          Return: AX = 0001h success
  5644.             = 0000h failure
  5645.                 BL = status (80h,81h,A0h-A2h,ABh) (see below)
  5646. Notes:    HIMEM.SYS requires at least 256 bytes free stack space
  5647.     the XMS driver need not implement functions 10h through 12h to be
  5648.       considered compliant with the standard
  5649. BUG:    HIMEM v3.03-3.07 crash on an 80286 machine if any of the 8Xh functions
  5650.       are called
  5651.  
  5652. Error codes returned in BL:
  5653.  00h    successful
  5654.  80h    function not implemented
  5655.  81h    Vdisk was detected
  5656.  82h    an A20 error occurred
  5657.  8Eh    a general driver error
  5658.  8Fh    unrecoverable driver error
  5659.  90h    HMA does not exist
  5660.  91h    HMA is already in use
  5661.  92h    DX is less than the /HMAMIN= parameter
  5662.  93h    HMA is not allocated
  5663.  94h    A20 line still enabled
  5664.  A0h    all extended memory is allocated
  5665.  A1h    all available extended memory handles are allocated
  5666.  A2h    invalid handle
  5667.  A3h    source handle is invalid
  5668.  A4h    source offset is invalid
  5669.  A5h    destination handle is invalid
  5670.  A6h    destination offset is invalid
  5671.  A7h    length is invalid
  5672.  A8h    move has an invalid overlap
  5673.  A9h    parity error occurred
  5674.  AAh    block is not locked
  5675.  ABh    block is locked
  5676.  ACh    block lock count overflowed
  5677.  ADh    lock failed
  5678.  B0h    only a smaller UMB is available
  5679.  B1h    no UMB's are available
  5680.  B2h    UMB segment number is invalid
  5681.  
  5682. Format of EMM structure:
  5683. Offset    Size    Description
  5684.  00h    DWORD    number of bytes to move (must be even)
  5685.  04h    WORD    source handle
  5686.  06h    DWORD    offset into source block
  5687.  0Ah    WORD    destination handle
  5688.  0Ch    DWORD    offset into destination block
  5689. Notes:    if source and destination overlap, only forward moves (source base
  5690.       less than destination base) are guaranteed to work properly
  5691.     if either handle is zero, the corresponding offset is interpreted
  5692.       as a real-mode address referring to memory directly addressable
  5693.       by the processor
  5694.  
  5695. Format of XMS handle info [array]:
  5696. Offset    Size    Description
  5697.  00h    BYTE    handle
  5698.  01h    BYTE    lock count
  5699.  02h    DWORD    handle size
  5700.  06h    DWORD    handle physical address (only valid if lock count nonzero)
  5701. ----------2F4320-----------------------------
  5702. INT 2F U - HIMEM.SYS - Mach 20 SUPPORT
  5703.     AX = 4320h
  5704.     ???
  5705. Return: ???
  5706. --------m-2F4330-----------------------------
  5707. INT 2F UC - HIMEM.SYS v2.77+ - GET EXTERNAL A20 HANDLER ADDRESS
  5708.     AX = 4330h
  5709. Return: AL = 80h if external A20 handler provided
  5710.         ES:BX -> external A20 handler
  5711.         CL = ???
  5712. Note:    HIMEM.SYS calls this function to allow an external program to provide
  5713.       an A20 handler (i.e. to support a machine not supported by HIMEM
  5714.       itself)
  5715.  
  5716. External A20 handler called with:
  5717.     AX = function
  5718.         0000h disable A20
  5719.         0001h enable A20
  5720.     Return: AX = status
  5721.             0000h failure
  5722.             0001h successful
  5723. SeeAlso: AX=4308h,AX=4310h
  5724. --------E-2F43E0-----------------------------
  5725. INT 2F - Novell DOS Protected Mode Services (DPMS) - INSTALLATION CHECK
  5726.     AX = 43E0h
  5727. Return: AX = 0000h if installed
  5728.         ES:BX -> registration structure (see below)
  5729. Note:    this specification is still in beta
  5730. SeeAlso: INT 2F/AX=1687h
  5731.  
  5732. Format of registration structure:
  5733. Offset    Size    Description
  5734.  00h    DWORD    real-mode API entry point
  5735.  04h    DWORD    16-bit protected-mode API entry point
  5736.  08h  8 BYTEs    reserved (0)
  5737.  10h  8 BYTEs    blank-padded server OEM name
  5738.  18h    WORD    flags
  5739.         bit 0: fast processor reset available (286 only)
  5740.         bits 1-15 reserved (undefined)
  5741.  1Ah  2 BYTEs    DPMS version (major,minor)
  5742.  1Ch    BYTE    CPU type (02h = 286, 03h = 386 or higher)
  5743.  
  5744. Call DPMS entry point with:
  5745.     AX = 0100h call protected-mode procedure
  5746.         CX = number of words of stack to copy
  5747.         ES:DI -> callup/down register structure (see below)
  5748.         Return: CF clear if successful
  5749.             CF set on error
  5750.                 AX = error code (see below)
  5751.     AX = 0101h call real-mode procedure (RETF return)
  5752.         CX = number of words of stack to copy
  5753.         ES:DI -> callup/down register structure (see below)
  5754.         Return: CF clear if successful
  5755.             CF set on error
  5756.                 AX = error code (see below)
  5757.     AX = 0102h call real-mode procedure (IRET return)
  5758.         CX = number of words of stack to copy
  5759.         ES:DI -> callup/down register structure (see below)
  5760.         Return: CF clear if successful
  5761.             CF set on error
  5762.                 AX = error code (see below)
  5763.     AX = 0103h call real-mode interrupt handler
  5764.         BL = interrupt number
  5765.         CX = number of words of stack to copy
  5766.         ES:DI -> callup/down register structure (see below)
  5767.         Return: CF clear if successful
  5768.             CF set on error
  5769.                 AX = error code (see below)
  5770.     AX = 0200h allocate descriptors
  5771.         CX = number of descriptors to allocate
  5772.         Return: CF clear if successful
  5773.                 AX = first descriptor allocated
  5774.             CF set on error
  5775.                 AX = error code (see below)
  5776.     AX = 0201h free a descriptor
  5777.         BX = descriptor
  5778.         Return: CF clear if successful
  5779.             CF set on error
  5780.                 AX = error code (see below)
  5781.     AX = 0202h create alias descriptor
  5782.         BX = descriptor
  5783.         Return: CF clear if successful
  5784.                 AX = alias descriptor
  5785.             CF set on error
  5786.                 AX = error code (see below)
  5787.     AX = 0203h build alias to real-mode segment
  5788.         BX = descriptor
  5789.         CX = real-mode segment
  5790.         Return: CF clear if successful
  5791.             CF set on error
  5792.                 AX = error code (see below)
  5793.     AX = 0204h set descriptor base
  5794.         BX = descriptor
  5795.         CX:DX = base address
  5796.         Return: CF clear if successful
  5797.             CF set on error
  5798.                 AX = error code (see below)
  5799.     AX = 0205h set descriptor limit
  5800.         BX = descriptor
  5801.         CX = limit
  5802.         Return: CF clear if successful
  5803.             CF set on error
  5804.                 AX = error code (see below)
  5805.     AX = 0206h set descriptor type/attribute
  5806.         BX = descriptor
  5807.         CL = type
  5808.         CH = attribute
  5809.         Return: CF clear if successful
  5810.             CF set on error
  5811.                 AX = error code (see below)
  5812.     AX = 0207h get descriptor base
  5813.         BX = descriptor
  5814.         Return: CF clear if successful
  5815.                 CX:DX = base address
  5816.             CF set on error
  5817.                 AX = error code (see below)
  5818.     AX = 0300h get size of largest free block of memory
  5819.         Return: CF clear if successful
  5820.                 BX:CX = size
  5821.             CF set on error
  5822.                 AX = error code (see below)
  5823.     AX = 0301h allocate block of extended memory
  5824.         BX:CX = size
  5825.         Return: CF clear if successful
  5826.                 BX:CX = base address
  5827.                 SI:DI = handle
  5828.             CF set on error
  5829.                 AX = error code (see below)
  5830.     AX = 0302h free block of extended memory
  5831.         SI:DI = handle
  5832.         Return: CF clear if successful
  5833.             CF set on error
  5834.                 AX = error code (see below)
  5835.     AX = 0303h map linear memory
  5836.         ES:[DI] = DDS
  5837.         Return: CF clear if successful
  5838.                 BX:CX = base address
  5839.                 SI:DI = handle
  5840.             CF set on error
  5841.                 AX = error code (see below)
  5842.     AX = 0304h unmap linear memory
  5843.         SI:DI = handle
  5844.         Return: CF clear if successful
  5845.             CF set on error
  5846.                 AX = error code (see below)
  5847.     AX = 0400h relocate segment to extended memory
  5848.         ES:SI = base address
  5849.         CX = limit
  5850.         BL = type
  5851.         BH = attribute
  5852.         DX = selector or 0000h
  5853.         Return: CF clear if successful
  5854.                 AX = selector
  5855.                 BX:CX = new base address
  5856.                 SI:DI = handle
  5857.             CF set on error
  5858.                 AX = error code (see below)
  5859.  
  5860. Values for error code:
  5861.  8000h    general error
  5862.  8001h    unsupported function
  5863.  8011h    descriptor unavailable
  5864.  8012h    linear memory unavailable
  5865.  8013h    physical memory unavailable
  5866.  8021h    invalid value
  5867.  8022h    invalid selector
  5868.  8023h    invalid handle
  5869.  
  5870. Format of callup/down register structure:
  5871. Offset    Size    Description
  5872.  00h    DWORD    EDI
  5873.  04h    DWORD    ESI
  5874.  08h    DWORD    EBP
  5875.  0Ch  4 BYTEs    reserved (0)
  5876.  10h    DWORD    EBX
  5877.  14h    DWORD    EDX
  5878.  18h    DWORD    ECX
  5879.  20h    DWORD    EAX
  5880.  24h    DWORD    EIP
  5881.  28h    WORD    CS
  5882.  2Ah  2 BYTEs    reserved (0)
  5883.  2Ch    DWORD    EFLAGS
  5884.  30h    DWORD    ESP
  5885.  34h    WORD    SS
  5886.  36h  2 BYTEs    reserved (0)
  5887.  38h    WORD    ES
  5888.  3Ah  2 BYTEs    reserved (0)
  5889.  3Ch    WORD    DS
  5890.  3Eh  2 BYTEs    reserved (0)
  5891.  40h    WORD    FS
  5892.  42h  2 BYTEs    reserved (0)
  5893.  44h    WORD    GS
  5894.  46h  2 BYTEs    reserved (0)
  5895. ----------2F44-------------------------------
  5896. INT 2F U - DOS Extender support???
  5897.     AH = 44h
  5898.     AL = function (at least 0Bh, 15h, 17h)
  5899.     ???
  5900. Return: ???
  5901. Note:    called by Codeview for Windows
  5902. SeeAlso: AH=86h
  5903. --------G-2F4500-----------------------------
  5904. INT 2F U - Microsoft Profiler (PROF.COM/VPROD.386) - INSTALLATION CHECK
  5905.     AX = 4500h
  5906. Return: AL = 01h if PROF.COM installed
  5907.     AL = 02h if VPROD.386 installed
  5908. SeeAlso: AX=4501h,AX=4502h
  5909. --------G-2F4501-----------------------------
  5910. INT 2F U - Microsoft Profiler (PROF.COM/VPROD.386) - SETUP PROFILER
  5911.     AX = 4501h
  5912.     BX = CSIPS buffer size in KB (first parameter for ProfSetup)
  5913.     CX = output limit in KB (second parameter for ProfSetup)
  5914. Note:    this call is not supported by PROF.COM
  5915. SeeAlso: AX=4502h,AX=4503h
  5916. --------G-2F4502-----------------------------
  5917. INT 2F U - Microsoft Profiler (PROF.COM/VPROD.386) - SET SAMPLING RATE
  5918.     AX = 4502h
  5919.     BL = sampling rate for PROF.COM (0 < BL <= 13)
  5920.         (01h = 8192/s, 04h = 1024/s, 08h = 32/s, 0Dh = 1/s)
  5921.     CX = sampling rate for VPROD.386
  5922. Note:    for PROF.COM, this programs the CMOS clock by setting BL+2 as the
  5923.       low four bits of CMOS register 0Ah.  The interruption rate is
  5924.       1 SHL (15 - BL) per second.
  5925. SeeAlso: AX=4501h,AX=4503h
  5926. --------G-2F4503-----------------------------
  5927. INT 2F U - Microsoft Profiler (PROF.COM/VPROD.386) - START PROFILING
  5928.     AX = 4503h
  5929. Notes:    Profiling is also turned on by the key combinations
  5930.       LeftShift + RightShift + Alt
  5931.       LeftShift + RightShift + Ctrl
  5932.     for PROF.COM, this call programs the CMOS clock by reading register
  5933.       0Ch, and setting bit 6 of register 0Bh.  It then makes sure that IRQ8
  5934.       is unmasked
  5935. SeeAlso: AX=4504h
  5936. --------G-2F4504-----------------------------
  5937. INT 2F U - Microsoft Profiler (PROF.COM/VPROD.386) - STOP PROFILING
  5938.     AX = 4504h
  5939. Notes:    profiling is also turned off by the key combination
  5940.       LeftShift + RightShift
  5941.     for PROF.COM, this programs the CMOS clock by reading register 0Ch
  5942.       and clearing bit 6 of register 0Bh.  It then masks IRQ8.
  5943. SeeAlso: AX=4503h,AX=4505h,AX=4506h,AX=4507h
  5944. --------G-2F4505-----------------------------
  5945. INT 2F U - Microsoft Profiler (PROF.COM/VPROD.386) - CLEAR PROFILING DATA
  5946.     AX = 4505h
  5947. SeeAlso: AX=4503h,AX=4504h,AX=4506h
  5948. --------G-2F4506-----------------------------
  5949. INT 2F U - Microsoft Profiler (PROF.COM/VPROD.386) - "ProfFlush"
  5950.     AX = 4506h
  5951. SeeAlso: AX=4505h,AX=4507h
  5952. --------G-2F4507-----------------------------
  5953. INT 2F U - Microsoft Profiler (PROF.COM/VPROD.386) - "ProfFinish"
  5954.     AX = 4507h
  5955. Note:    this call is essentially a "ProfStop" (AX=4504h) followed by
  5956.       "ProfFlush" (AX=4506h)
  5957. SeeAlso: AX=4504h,AX=4505h,AX=4506h
  5958. --------G-2F4508-----------------------------
  5959. INT 2F U - Microsoft Profiler (PROF.COM/VPROD.386) - ALTERNATE SEGDEBUG IFACE
  5960.     AX = 4508h
  5961.     BX = ordinal (or 0000h)
  5962.     CX = segment
  5963.     DX = instance (or 0000h)
  5964.     SI = type (or 0000h)
  5965.     ES:DI -> ASCIZ module name
  5966. Notes:    this call is an alternate entry to the profiler's SEGDEBUG
  5967.       interface, but only to function 0, for notifying the profiler of
  5968.       each new segment loaded.  The SHOWHITS utility then examines the
  5969.       profiler's output files (CSIPS.DAT and SEGENTRY.DAT) in conjunction
  5970.       with symbol files to provide information in a useful form.
  5971.     this call does not have a corresponding Windows function
  5972. SeeAlso: AX=4500h
  5973. --------D-2F4601-----------------------------
  5974. INT 2F U - DOS 5+ kernel - ???
  5975.     AX = 4601h
  5976. Return: ???
  5977. Note:    copies the MCB following the caller's PSP memory block into DOS data
  5978.       segment
  5979. SeeAlso: AX=4602h
  5980. --------D-2F4602-----------------------------
  5981. INT 2F U - DOS 5+ kernel - ???
  5982.     AX = 4602h
  5983. Return: ???
  5984. Note:    copies previously copied MCB from DOS data segment into MCB following
  5985.       caller's PSP memory block
  5986. SeeAlso: AX=4601h
  5987. ----------2F46-------------------------------
  5988. INT 2F U - Windows/286 DOS Extender
  5989.     AH = 46h
  5990.     AL = subfunction (03h,04h)
  5991. Return: ???
  5992. Note:    these two subfunctions are called by MS Windows 3.0
  5993. --------v-2F4653CX0002-----------------------
  5994. INT 2F - F-PROT v1.x only - F-LOCK.EXE
  5995.     AX = 4653h
  5996.     CX = 0002h
  5997.     BX = subfunction
  5998.         0000h  installation check
  5999.         Return: AX = FFFFh
  6000.         0001h  uninstall
  6001.         Return: AX,BX,ES destroyed
  6002.         0002h  disable (v1.08 and below only)
  6003.         0003h  enable (v1.08 and below only)
  6004. Note:    F-LOCK is part of the F-PROT virus/trojan protection package by Fridrik
  6005.       Skulason
  6006. SeeAlso: AX=4653h/CX=0003h,AX=CA00h,INT 21/AX=4BEEh
  6007. Index:    installation check;F-LOCK|uninstall;F-LOCK
  6008. --------v-2F4653CX0003-----------------------
  6009. INT 2F - F-PROT v1.x only - F-XCHK.EXE
  6010.     AX = 4653h
  6011.     CX = 0003h
  6012.     BX = subfunction
  6013.         0000h  installation check
  6014.         Return: AX = FFFFh
  6015.         0001h  uninstall
  6016.         Return: AX,BX,ES destroyed
  6017. Note:    F-XCHK is part of the F-PROT virus/trojan protection package by Fridrik
  6018.       Skulason
  6019. SeeAlso: AX=4653h/CX=0002h,AX=4653h/CX=0004h,AX=CA00h
  6020. Index:    installation check;F-XCHK|uninstall;F-XCHK
  6021. --------v-2F4653CX0004-----------------------
  6022. INT 2F - F-PROT v1.x only - F-POPUP.EXE
  6023.     AX = 4653h
  6024.     CX = 0004h
  6025.     BX = subfunction
  6026.         0000h  installation check
  6027.         Return: AX = FFFFh
  6028.         0001h  uninstall
  6029.         Return: AX,BX,ES destroyed
  6030.         0002h  disable (v1.08 and below only)
  6031.            display message (v1.14+)
  6032.             other registers: ???
  6033.         0003h  enable (v1.08 and below only)
  6034.            display message (v1.14+)
  6035.             other registers: ???
  6036.             Return: AX = key pressed by user
  6037. Note:    F-POPUP is part of the F-PROT virus/trojan protection package by
  6038.       Fridrik Skulason
  6039. SeeAlso: AX=4653h/CX=0003h,AX=4653h/CX=0005h,AX=CA00h
  6040. Index:    installation check;F-POPUP|uninstall;F-POPUP
  6041. --------v-2F4653CX0005-----------------------
  6042. INT 2F - F-PROT v1.x only - F-DLOCK.EXE
  6043.     AX = 4653h
  6044.     CX = 0005h
  6045.     BX = subfunction
  6046.         0000h installation check
  6047.         Return: AX = FFFFh
  6048.         0001h uninstall
  6049.         Return: AX,BX,ES destroyed
  6050. Note:    F-DLOCK is part of the F-PROT virus/trojan protection package by
  6051.       Fridrik Skulason
  6052. SeeAlso: AX=4653h/CX=0004h,AX=CA00h
  6053. Index:    installation check;F-DLOCK|uninstall;F-DLOCK
  6054. --------W-2F4680-----------------------------
  6055. INT 2F U - MS Windows v3.0 - INSTALLATION CHECK
  6056.     AX = 4680h
  6057. Return: AX = 0000h MS Windows 3.0 running in real (/R) or standard (/S) mode,
  6058.            or DOS 5 DOSSHELL active
  6059.        nonzero  no Windows, Windows prior to 3.0, or Windows3 in enhanced
  6060.             mode
  6061. Note:    Windows 3.1 finally provides an installation check which works in all
  6062.       modes (see AX=160Ah)
  6063. SeeAlso: AX=1600h,AX=160Ah
  6064. ----------2F47-------------------------------
  6065. INT 2F U - ???
  6066.     AH = 47h
  6067.     ???
  6068. Return: ???
  6069. Note:    reportedly called by Microsoft BASIC Compiler v7.0
  6070. --------K-2F4800-----------------------------
  6071. INT 2F - DOS 5+ DOSKEY - INSTALLATION CHECK
  6072.     AX = 4800h
  6073. Return: AL = nonzero if installed (DOS 5.0 and 6.0 return AX=AA02h)
  6074.         ES = segment of DOSKEY resident portion
  6075. Note:    DOSKEY chains if AL is not 00h or 10h on entry
  6076. SeeAlso: AX=4800h"PCED",AX=4810h
  6077. --------K-2F4800-----------------------------
  6078. INT 2F - PCED v2.1 - INSTALLATION CHECK
  6079.     AX = 4800h
  6080. Return: AX = AACDh if installed
  6081.         ES = segment of PCED kernel (PCED has multiple code segments)
  6082. Program: PCED v2.1 is a command line editor/history/macro facility by
  6083.       Cove Software.  It is the commercial version of the freeware CED.
  6084. Notes:    DOSKEY also responds to this call if installed, returning AX=AA02h.
  6085.     unlike DOSKEY, PCED does *not* chain if AL contains an
  6086.       unsupported function code.  It IRETs with all registers intact.
  6087. --------K-2F4810-----------------------------
  6088. INT 2F - DOS 5+ DOSKEY, PCED v2.1 - READ INPUT LINE FROM CONSOLE
  6089.     AX = 4810h
  6090.     DS:DX -> line buffer (see INT 21/AH=0Ah)
  6091. Return: AX = 0000h if successful
  6092. Notes:    the first byte (length) of the buffer MUST be 80h, or DOSKEY chains to
  6093.       the previous handler; PCED allows sizes other than 80h
  6094.     if the user's input is a macro name, no text is placed in the buffer
  6095.       even though AX=0000h on return; the program must immediately issue
  6096.       this call again to retrieve the expansion of the macro.  Similarly,
  6097.       if the user enters a special parameter such as $*, this call must
  6098.       be repeated to retrieve the expansion; on the second call, DOSKEY
  6099.       overwrites the macro name on the screen with its expansion.
  6100.     unlike DOSKEY, PCED expands all macros on the first call, so it is
  6101.       not necessary to make two calls; since the buffer is not empty on
  6102.       return, DOSKEY-aware programs will not make the second call
  6103.     DOSKEY chains if AL is not 00h or 10h on entry
  6104. SeeAlso: AX=4800h,INT 21/AH=0Ah
  6105. --------K-2F48C0-----------------------------
  6106. INT 2F - PCED v2.1 - PCED API
  6107.     AX = 48C0h
  6108.     DX = API function code
  6109.     other registers as required by the specified function
  6110. Return: CF clear if successful
  6111.     CF set on error
  6112.         AX = PCED error code
  6113.     other registers as appropriate for API function
  6114. Program: PCED v2.1 is a command line editor/history/macro facility by
  6115.       Cove Software.  It is the commercial version of the freeware CED.
  6116. Note:    the full API information is available from Cove Software
  6117. SeeAlso: AX=4800h"PCED",AX=48C1h,AX=48C2h,AX=48C3h
  6118. ----------2F48C1BL00-------------------------
  6119. INT 2F - PCED/VSTACK - INSTALLATION CHECK
  6120.     AX = 48C1h
  6121.     BL = 00h
  6122. Return: AX = 0000h if installed
  6123.         BX = VSTACK resident segment
  6124. Program: VSTACK is a resident backscroll utility included as part of the PCED
  6125.       package
  6126. Note:    chains if BL <> 00h on entry
  6127. SeeAlso: AX=48C0h,AX=48C2h
  6128. ----------2F48C2BL00-------------------------
  6129. INT 2F - PCED/ATTRIB - INSTALLATION CHECK
  6130.     AX = 48C2h
  6131.     BL = 00h
  6132. Return: AX = 0000h if installed
  6133.         BX = ATTRIB resident segment
  6134. Program: ATTRIB is a resident file attribute changer included as part of the
  6135.       PCED package
  6136. Note:    chains if BL <> 00h on entry
  6137. SeeAlso: AX=48C0h,AX=48C1h,AX=48C3h
  6138. --------K-2F48C3BL00-------------------------
  6139. INT 2F - PCED/KEYDEF - INSTALLATION CHECK
  6140.     AX = 48C3h
  6141.     BL = 00h
  6142. Return: AX = 0000h if installed
  6143.         BX = KEYDEF resident segment
  6144. Program: KEYDEF is a resident keyboard redefinition utility included as part
  6145.       of the PCED package
  6146. Note:    chains if BL <> 00h on entry
  6147. SeeAlso: AX=48C0h,AX=48C2h,AX=48C4h
  6148. ----------2F48C4BL00-------------------------
  6149. INT 2F - PCED/FLIST - INSTALLATION CHECK
  6150.     AX = 48C4h
  6151.     BL = 00h
  6152. Return: AX = 0000h if installed
  6153.         BX = FLIST resident segment
  6154. Program: FLIST is a resident filelist processor included as part of the PCED
  6155.       package
  6156. Note:    chains if BL <> 00h on entry
  6157. SeeAlso: AX=48C0h,AX=48C3h,AX=48C5h
  6158. ----------2F48C4BL00-------------------------
  6159. INT 2F - PCED/ASSOC - INSTALLATION CHECK
  6160.     AX = 48C4h
  6161.     BL = 00h
  6162. Return: AX = 0000h if installed
  6163.         BX = ASSOC resident segment
  6164. Program: ASSOC is a resident utility included as part of the PCED package which
  6165.       associated files with executable programs based on their extensions
  6166. Note:    chains if BL > 02h on entry
  6167. SeeAlso: AX=48C0h,AX=48C4h,AX=48C5h/BL=01h,AX=48C5h/BL=02h
  6168. ----------2F48C5BL01-------------------------
  6169. INT 2F - PCED/ASSOC - VERSION CHECK
  6170.     AX = 48C5h
  6171.     BL = 01h
  6172. Return: AX = 0000h if installed
  6173.         BX = binary ASSOC version (BL = major, BH = minor)
  6174. Note:    chains if BL > 02h on entry
  6175. SeeAlso: AX=48C0h,AX=48C5h/BL=00h,AX=48C5h/BL=02h
  6176. ----------2F48C5BL02-------------------------
  6177. INT 2F - PCED/ASSOC - ASSOCIATION TEST
  6178.     AX = 48C5h
  6179.     BL = 02h
  6180.     DS:SI -> ASCIZ filename
  6181. Return: AX = status
  6182.         0000h if filename is unknown
  6183.         0001h if there is an association defined for the file
  6184.     BX destroyed
  6185. Program: ASSOC is a resident utility included as part of the PCED package which
  6186.       associated files with executable programs based on their extensions
  6187. Note:    chains if BL > 02h on entry
  6188. SeeAlso: AX=48C0h,AX=48C5h/BL=00h,AX=48C5h/BL=01h
  6189. ----------2F49-------------------------------
  6190. INT 2F U - ???
  6191.     AH = 49h
  6192.     ???
  6193. Return: ???
  6194. Note:    reportedly called by DOS 5.0 installation
  6195. --------D-2F4A00CX0000-----------------------
  6196. INT 2F CU - DOS 5+ - FLOPPY-DISK LOGICAL DRIVE CHANGE NOTIFICATION
  6197.     AX = 4A00h
  6198.     CX = 0000h
  6199.     DH = new drive number
  6200.     DL = current drive number
  6201. Return: CX = FFFFh to skip "Insert diskette for drive X:" message
  6202. Note:    called by MS-DOS 5.0+ IO.SYS just before displaying the message
  6203.       "Insert diskette for drive X:" on single-floppy systems
  6204. --------D-2F4A01-----------------------------
  6205. INT 2F - DOS 5+ - QUERY FREE HMA SPACE
  6206.     AX = 4A01h
  6207. Return: BX = number of bytes available in HMA (0000h if DOS not using HMA)
  6208.     ES:DI -> start of available HMA area (FFFFh:FFFFh if not using HMA)
  6209. Note:    called by Windows 3.1 DOSX.EXE
  6210. SeeAlso: AX=4310h,AX=4A02h
  6211. --------D-2F4A02-----------------------------
  6212. INT 2F - DOS 5+ - ALLOCATE HMA SPACE
  6213.     AX = 4A02h
  6214.     BX = number of bytes
  6215. Return: ES:DI -> start of allocated HMA block or FFFFh:FFFFh
  6216.     BX = number of bytes actually allocated (rounded up to next paragraph
  6217.         for DOS 5.0 and 6.0)
  6218. Notes:    this call is not valid unless DOS is loaded in the HMA (DOS=HIGH)
  6219.     called by Windows 3.1 DOSX.EXE
  6220. SeeAlso: AX=4A01h
  6221. --------T-2F4A05-----------------------------
  6222. INT 2F U - DOS 5+ DOSSHELL - TASK SWITCHING API???
  6223.     AX = 4A05h
  6224.     SI = function
  6225.         0000h reset???
  6226.         0001h ???
  6227.         ES:BP -> 80-byte buffer containing ???
  6228.         0002h ???
  6229.         0003h ???
  6230.         0004h ???
  6231.         BL = ???
  6232.         0005h ???
  6233.         0006h get ???
  6234.         Return: ES:SI -> ???
  6235.         0007h get ???
  6236.         Return: AX = ???
  6237.         0008h get ???
  6238.         Return: DX:AX -> ??? (internal control data of some kind)
  6239.         0009h get ???
  6240.         Return: ES:SI -> ??? (apparently identical to function 0006h)
  6241.         000Ah ???
  6242.         BL = length of buffer
  6243.         ES:BP -> buffer containing ???
  6244.         000Bh get ???
  6245.         Return: AX = ???
  6246.         000Ch ???
  6247.         BL = ???
  6248.         Return: if BL nonzero on entry
  6249.                 DX:AX -> ???
  6250.             if BL = 00h on entry
  6251.                 ES:SI -> ???
  6252. Notes:    DOSSHELL chains to the previous handler if SI is not one of the values
  6253.       listed above
  6254.     the DOSSWAP.EXE module calls functions 03h,04h,05h,07h,08h,09h,0Ch
  6255.     the Windows 3.1 DSWAP.EXE and WSWAP.EXE task switchers use these calls
  6256. SeeAlso: AX=4B01h
  6257. --------D-2F4A06-----------------------------
  6258. INT 2F CU - DOS 5+ - DOS SUPERVISOR "REBOOT PANEL" - ADJUST MEMORY SIZE
  6259.     AX = 4A06h
  6260.     DX = segment following last byte of conventional memory
  6261. Return: DX = segment following last byte of memory available for use by DOS
  6262. Desc:    used to override the default memory size when booting diskless
  6263.       workstations
  6264. Notes:    called by MS-DOS 5+ IO.SYS startup code if the signature "RPL" is
  6265.       present three bytes beyond the INT 2F handler; this call overrides
  6266.       the value returned by INT 12
  6267.     hooked by RPL code at the top of memory to protect itself from being
  6268.       overwritten; DOS builds a memory block with owner = 0008h and name
  6269.       "RPL" which must be freed by the RPL code when it is done
  6270. SeeAlso: INT 12
  6271. ----------2F4A07-----------------------------
  6272. INT 2F U - RESERVED FOR PROTMAN SUPPORT
  6273.     AX = 4A07h
  6274.     ???
  6275. Return: ???
  6276. --------c-2F4A10BX0000-----------------------
  6277. INT 2F - SMARTDRV v4.00+ - INSTALLATION CHECK AND HIT RATIOS
  6278.     AX = 4A10h
  6279.     BX = 0000h
  6280.     CX = EBABh (v4.1+; see Note)
  6281. Return: AX = BABEh if installed
  6282.         DX:BX = cache hits
  6283.         DI:SI = cache misses
  6284.         CX = ???
  6285.         BP = version in BCD (4.10 = 0410h)
  6286. Notes:    most of the SMARTDRV API, including this call, is supported by
  6287.       PC-Cache v8.0
  6288.     if DBLSPACE.BIN is installed but SMARTDRV has not yet been installed,
  6289.       unless CX=EBABh on entry, DBLSPACE.BIN displays the error message
  6290.       "Cannot run SMARTDrive 4.0 with DoubleSpace" and aborts the caller
  6291.       with INT 21/AX=4C00h
  6292.     SMARTDRV v3.x had a completely different API using IOCTL calls
  6293. SeeAlso: AX=4A10h/BX=0001h,AX=4A10h/BX=0004h,AX=4A10h/BX=0005h
  6294. SeeAlso: AX=4A10h/BX=0007h,AX=4A10h/BX=1234h,AX=4A11h/BX=0000h
  6295. SeeAlso: INT 21/AX=4402h"SMARTDRV",INT 21/AX=4403h"SMARTDRV"
  6296. --------c-2F4A10BX0001-----------------------
  6297. INT 2F - SMARTDRV v4.00+ - FLUSH BUFFERS
  6298.     AX = 4A10h
  6299.     BX = 0001h
  6300. Note:    this function is also supported by PC-Cache v8.0.
  6301. SeeAlso: AX=4A10h/BX=0000h,AX=4A10h/BX=0002h
  6302. --------c-2F4A10BX0002-----------------------
  6303. INT 2F - SMARTDRV v4.00+ - RESET CACHE
  6304.     AX = 4A10h
  6305.     BX = 0002h
  6306. Note:    this function is also supported by PC-Cache v8.0.
  6307. SeeAlso: AX=4A10h/BX=0000h,AX=4A10h/BX=0001h
  6308. --------c-2F4A10BX0003-----------------------
  6309. INT 2F - SMARTDRV v4.00+ - STATUS
  6310.     AX = 4A10h
  6311.     BX = 0003h
  6312.     BP = drive # (0=A, 1=B, etc.)
  6313.     DL = subfunction
  6314.         00h only get information
  6315.         01h turn on read cache
  6316.         02h turn off read cache
  6317.         03h turn on write cache
  6318.         04h turn off write cache
  6319. Return: AX = BABEh if OK
  6320.     DL = status
  6321.         bit 7  not cached
  6322.         bit 6  write-through
  6323.         bit 5  ???
  6324.         bits 0-4 drive # (0=A, 1=B...)
  6325.     DL = FFh if drive does not exist
  6326. Notes:    If the read cache is off, reads will not be cached, but writes will
  6327.       continue to be cached if the write-cache is enabled.
  6328.     this function is also supported by PC-Cache v8.0.
  6329. SeeAlso: AX=4A10h/BX=0000h
  6330. --------c-2F4A10BX0004-----------------------
  6331. INT 2F - SMARTDRV v4.00+ - GET CACHE SIZE
  6332.     AX = 4A10h
  6333.     BX = 0004h
  6334. Return: AX = current size in elements???
  6335.     BX = largest number of elements
  6336.     CX = size of elements in bytes
  6337.     DX = number of elements under Windows
  6338. Note:    this function is also supported by PC-Cache v8.0.
  6339. SeeAlso: AX=4A10h/BX=0000h,AX=4A10h/BX=0003h,AX=4A10h/BX=0005h
  6340. --------c-2F4A10BX0005-----------------------
  6341. INT 2F - SMARTDRV v4.00+ - GET DOUBLE-BUFFER STATUS
  6342.     AX = 4A10h
  6343.     BX = 0005h
  6344.     BP = drive # (0=A, 1=B...)
  6345. Return: AX = BABEh if double-buffered
  6346.         ES:DI -> ???
  6347. SeeAlso: AX=4A10h/BX=0000h,AX=4A10h/BX=0003h,AX=4A10h/BX=0006h
  6348. --------c-2F4A10BX0006-----------------------
  6349. INT 2F CU - SMARTDRV v4.00+ - CHECK IF DRIVE CACHEABLE
  6350.     AX = 4A10h
  6351.     BX = 0006h
  6352.     CL = drive number (01h = A:)
  6353. Return: AX = 0006h if drive should not be cached by SMARTDRV
  6354. Note:    called by SMARTDRV at startup to determine whether it should cache
  6355.       a particular drive
  6356. SeeAlso: AX=4A10h/BX=0000h
  6357. --------c-2F4A10BX0007-----------------------
  6358. INT 2F - SMARTDRV v4.00+ - GET DEVICE DRIVER FOR DRIVE
  6359.     AX = 4A10h
  6360.     BX = 0007h
  6361.     BP = drive number
  6362. Return: DL = ???
  6363.     ES:DI -> device driver header for drive
  6364. Note:    this function is also supported by PC-Cache v8.0.
  6365. SeeAlso: AX=4A10h/BX=0000h,AX=4A11h/BX=0003h,AX=4A11h/BX=0004h
  6366. --------c-2F4A10BX000A-----------------------
  6367. INT 2F - SMARTDRV v4.00+ - GET TABLE POINTER???
  6368.     AX = 4A10h
  6369.     BX = 000Ah
  6370. Return: ES:BX -> table of about 10 bytes or 5 words. Seems to be words
  6371.          pointing to memory addresses containing info??? (see below)
  6372. Note:    this function is also supported by PC-Cache v8.0.
  6373. SeeAlso: AX=4A10h/BX=0000h
  6374.  
  6375. Format of data table:
  6376. Offset    Size    Description
  6377.  00h  8 BYTEs    ???
  6378.  08h    WORD    offset of WORD containing number of elements in cache
  6379. --------c-2F4A10BX1234-----------------------
  6380. INT 2F - SMARTDRV v4.00+ - SIGNAL SERIOUS ERROR
  6381.     AX = 4A10h
  6382.     BX = 1234h
  6383. Desc:    pops up a message box saying that a serious error occurred and to hit
  6384.       R to retry.
  6385. Note:    this function is also supported by PC-Cache v8.0.
  6386. SeeAlso: AX=4A10h/BX=0000h
  6387. --------d-2F4A11BX0000-----------------------
  6388. INT 2F - DBLSPACE.BIN - "GetVersion" - INSTALLATION CHECK
  6389.     AX = 4A11h
  6390.     BX = 0000h
  6391. Return: AX = 0000h (successful)
  6392.     BX = 444Dh ("DM")
  6393.     CL = first drive letter used by DBLSPACE (0=A:)
  6394.     CH = number of drive letters used by DBLSPACE
  6395.     DX = internal DBLSPACE.BIN version number (bits 14-0)
  6396.         bit 15 set if DBLSPACE.BIN has not yet been relocated to final
  6397.         position in memory (i.e. DBLSPACE.SYS /MOVE)
  6398. Program: DBLSPACE.BIN is the resident driver for DoubleSpace, the
  6399.       disk-compression software bundled with MS-DOS 6.0
  6400. SeeAlso: AX=4A11h/BX=0001h,AX=4A11h/BX=0002h,AX=4A11h/BX=0003h
  6401. SeeAlso: AX=4A11h/BX=0005h,AX=4A11h/BX=0007h,AX=4A11h/BX=FFFFh
  6402. SeeAlso: INT 21/AX=4404h"DBLSPACE"
  6403. --------d-2F4A11BX0001-----------------------
  6404. INT 2F - DBLSPACE.BIN - "GetDriveMapping" - GET DRIVE MAPPING
  6405.     AX = 4A11h
  6406.     BX = 0001h
  6407.     DL = drive number (0=A:)
  6408. Return: AX = status (see also below)
  6409.         0000h successful
  6410.         BL = host drive (bit 7 set if specified drive is compressed)
  6411.         BH = DoubleSpace sequence number
  6412.         other error code (0101h) (see below)
  6413. Note:    the compressed volume file for the specified compressed drive is
  6414.       host:\DBLSPACE.sequence
  6415. SeeAlso: AX=4A11h/BX=0000h
  6416.  
  6417. Values for status:
  6418.  0000h    successful
  6419.  0100h    bad function
  6420.  0101h    invalid drive
  6421.  0102h    not a compressed drive
  6422.  0103h    drive already swapped
  6423.  0104h    drive not swapped
  6424. --------d-2F4A11BX0002-----------------------
  6425. INT 2F - DBLSPACE.BIN - "Swap Drive" - SWAP DRIVE LETTERS OF CVF AND HOST DRIVE
  6426.     AX = 4A11h
  6427.     BX = 0002h
  6428.     DL = drive number (0=A:) of compressed drive to swap with its host
  6429. Return: AX = status (0000h,0101h,0102h,0103h) (see AX=4A11h/BX=0001h)
  6430. Note:    this function is intended for use by DBLSPACE.EXE only
  6431. SeeAlso: AX=4A11h/BX=0000h
  6432. --------d-2F4A11BX0003-----------------------
  6433. INT 2F U - DBLSPACE.BIN - GET DEVICE DRIVER ENTRY POINTS
  6434.     AX = 4A11h
  6435.     BX = 0003h
  6436.     CL = drive number (0=A:) of compressed drive
  6437. Return: CL = FFh on error (not compressed drive)
  6438.        = other host drive???
  6439.         ES:SI -> device driver's strategy routine
  6440.         ES:DI -> device driver's interrupt routine
  6441.     BX destroyed
  6442. Note:    the official documentation states that this function is reserved for
  6443.       use by SMARTDRV; this function and AX=4A11h/BX=0004h allow SMARTDRV
  6444.       to apply the same device driver wrapper to DoubleSpaced drives that
  6445.       it applies to regular block devices
  6446. SeeAlso: AX=4A10h/BX=0007h,AX=4A11h/BX=0000h,AX=4A11h/BX=0004h
  6447. --------d-2F4A11BX0004-----------------------
  6448. INT 2F U - DBLSPACE.BIN - SET DEVICE DRIVER ENTRY POINTS
  6449.     AX = 4A11h
  6450.     BX = 0004h
  6451.     CL = drive number (0=A:) of compressed drive
  6452.     ES:SI -> device driver strategy routine to call for drive
  6453.     ES:DI -> device driver interrupt routine to call for drive
  6454.     DX = ???host for compressed drive
  6455. Return: CL = FFh on error
  6456.     BX destroyed
  6457. Program: DBLSPACE.BIN is the resident driver for DoubleSpace, the
  6458.       disk-compression software bundled with MS-DOS 6.0
  6459. Note:    the official documentation states that this function is reserved for
  6460.       use by SMARTDRV; this function and AX=4A11h/BX=0003h allow SMARTDRV
  6461.       to apply the same device driver wrapper to DoubleSpaced drives that
  6462.       it applies to regular block devices
  6463. SeeAlso: AX=4A10h/BX=0007h,AX=4A11h/BX=0000h,AX=4A11h/BX=0003h
  6464. --------d-2F4A11BX0005-----------------------
  6465. INT 2F - DBLSPACE.BIN - "ActivateDrive" - MOUNT COMPRESSED DRIVE
  6466.     AX = 4A11h
  6467.     BX = 0005h
  6468.     DL = drive number (0=A:) to assign to new drive
  6469.     ES:SI -> activation record (see below)
  6470. Return: status returned in activation record (see below)
  6471. SeeAlso: AX=4A11h/BX=0000h,AX=4A11h/BX=0006h
  6472.  
  6473. Format of activation record:
  6474. Offset    Size    Description
  6475.  00h  2 BYTEs    signature "MD" (4Dh 44h)
  6476.  02h    BYTE    4Dh ('M') mount command
  6477.  03h    BYTE    error code (set to FFh before calling)
  6478.         01h drive letter not available for DoubleSpace
  6479.         02h drive letter already in use
  6480.         03h no more disk units (increase MaxRemovableDrives in .INI)
  6481.         09h CVF too fragmented
  6482.  04h    BYTE    host drive number (0=A:)
  6483.  05h    ???    DISK_UNIT structure (not documented)
  6484. --------d-2F4A11BX0006-----------------------
  6485. INT 2F - DBLSPACE.BIN - "DeactivateDrive" - UNMOUNT COMPRESSED DRIVE
  6486.     AX = 4A11h
  6487.     BX = 0006h
  6488.     DL = drive number (0=A:) to unmount
  6489. Return: AX = status (0000h,0102h) (see AX=4A11h/BX=0001h)
  6490. SeeAlso: AX=4A11h/BX=0000h,AX=4A11h/BX=0005h
  6491. --------d-2F4A11BX0007-----------------------
  6492. INT 2F - DBLSPACE.BIN - "GetDriveSpace" - GET SPACE AVAIL ON COMPRESSED DRIVE
  6493.     AX = 4A11h
  6494.     BX = 0007h
  6495.     DL = compressed drive number (0=A:)
  6496. Return: AX = status (0000h,0102h) (see also AX=4A11h/BX=0001h)
  6497.         0000h successful
  6498.         DS:SI -> free space record (see below)
  6499. Program: DBLSPACE.BIN is the resident driver for DoubleSpace, the
  6500.       disk-compression software bundled with MS-DOS 6.0
  6501. SeeAlso: AX=4A11h/BX=0000h,AX=4A11h/BX=0008h
  6502.  
  6503. Format of free space record:
  6504. Offset    Size    Description
  6505.  00h    DWORD    total number of sectors in drive's sector heap
  6506.  04h    DWORD    number of free sectors in drive's sector heap
  6507. --------d-2F4A11BX0008-----------------------
  6508. INT 2F - DBLSPACE.BIN - "GetFileFragmentSpace" - GET SIZE OF FRAGMENT HEAP
  6509.     AX = 4A11h
  6510.     BX = 0008h
  6511.     DL = compressed drive number (0=A:)
  6512. Return: AX = status (0000h,0102h) (see also AX=4A11h/BX=0001h)
  6513.         0000h successful
  6514.         BX = maximum entries in File Fragment heap
  6515.         CX = available entries in File Fragment heap
  6516. SeeAlso: AX=4A11h/BX=0000h,AX=4A11h/BX=0007h,AX=4A11h/BX=0009h
  6517. --------d-2F4A11BX0009-----------------------
  6518. INT 2F - DBLSPACE.BIN - "GetExtraInfo" - DETERMINE NUMBER OF DISK_UNIT STRUCTS
  6519.     AX = 4A11h
  6520.     BX = 0009h
  6521.     DL = compressed drive number (0=A:)
  6522. Return: AX = status (see also AX=4A11h/BX=0001h)
  6523.         0000h successful
  6524.         CL = number of DISK_UNIT structures allocated
  6525.             (see AX=4A11h/BX=0005h)
  6526. SeeAlso: AX=4A11h/BX=0000h,AX=4A11h/BX=0008h
  6527. --------d-2F4A11BXFFFE-----------------------
  6528. INT 2F U - DBLSPACE.BIN - RELOCATE
  6529.     AX = 4A11h
  6530.     BX = FFFEh
  6531.     ES = segment to which to relocate DBLSPACE.BIN
  6532. Return: ???
  6533. Notes:    called by DBLSPACE.SYS to relocate DBLSPACE.BIN to its final position
  6534.       in memory
  6535.     this function also unhooks and discards the code providing this
  6536.       function and AX=4A11h/BX=FFFFh
  6537. SeeAlso: AX=4A11h/BX=FFFFh
  6538. --------d-2F4A11BXFFFF-----------------------
  6539. INT 2F U - DBLSPACE.BIN - GET RELOCATION SIZE
  6540.     AX = 4A11h
  6541.     BX = FFFFh
  6542. Return: AX = number of paragraphs needed by DBLSPACE.BIN
  6543. Note:    used by DBLSPACE.SYS to relocate the DBLSPACE driver to its final
  6544.       position in memory
  6545. SeeAlso: AX=4A11h/BX=0000h,AX=4A11h/BX=FFFEh
  6546. --------d-2F4A12CX4D52-----------------------
  6547. INT 2F - Microsoft Realtime Compression Interface (MRCI) - RAM-BASED SERVER
  6548.     AX = 4A12h
  6549.     CX = 4D52h ("MR")
  6550.     DX = 4349h ("CI")
  6551. Return: CX = 4943h ("IC") if installed
  6552.     DX = 524Dh ("RM") if installed
  6553.         ES:DI -> MRCINFO structure (see INT 1A/AX=B001h)
  6554. Note:    this call is functionally identical to INT 1A/AX=B001h, but should be
  6555.       called first, as the latter call is used for the first, ROM-based
  6556.       MRCI server, while this call is used for RAM-based servers which
  6557.       may be partially or entirely replacing a prior server
  6558. SeeAlso: INT 1A/AX=B001h
  6559. --------d-2F4A13-----------------------------
  6560. INT 2F U - DBLSPACE.BIN - GET ??? ENTRY POINTS
  6561.     AX = 4A13h
  6562. Return: AX = 134Ah if supported
  6563.         ES:BX -> entry point record (see below)
  6564. SeeAlso: AX=4A11h/BX=0000h
  6565.  
  6566. Format of entry point record:
  6567. Offset    Size    Description
  6568.  00h    DWORD    pointer to FAR function for ???
  6569.  04h  5 BYTEs    FAR JUMP instruction to ???
  6570. --------N-2F4B-------------------------------
  6571. INT 2F - LAN Manager 2.0 DOS Enh NETWKSTA.EXE - NETWORK WORKSTATION REDIRECTOR
  6572.     AH = 4Bh
  6573.     ???
  6574. Return: ???
  6575. Note:    LAN Manager enhanced mode adds features beyond the standard redirector
  6576.       file/printer services
  6577. SeeAlso: AX=118Ah,AX=4100h,AH=42h
  6578. --------T-2F4B01-----------------------------
  6579. INT 2F C - DOS 5+ TASK SWITCHER - BUILD CALLOUT CHAIN
  6580.     AX = 4B01h
  6581.     CX:DX -> task switcher entry point (see AX=4B02h)
  6582.     ES:BX = 0000h:0000h
  6583. Return: ES:BX -> callback info structure (see below) or 0000h:0000h
  6584. Notes:    called by the task switcher
  6585.     this function is hooked by clients which require notification of task
  6586.       switcher activities; the call must first be passed on to the prior
  6587.       handler with registers unchanged using a simulated interrupt.     On
  6588.       return, the client must build a callback info structure and store
  6589.       the returned ES:BX in the "next" field, then return the address of
  6590.       its own callback info structure.
  6591.     a client program must add itself to the notification chain if it
  6592.       provides services to other programs; before terminating, it must
  6593.       remove itself from the chain by calling the task switcher's entry
  6594.       point with AX=0005h (see AX=4B02h)
  6595.     the task switcher entry point should not be saved, as it is subject to
  6596.       change and will be provided on any notification call
  6597.     the Windows 3.1 Standard Mode supports this API
  6598. SeeAlso: AX=160Bh,AX=4B02h
  6599.  
  6600. Format of callback info structure:
  6601. Offset    Size    Description
  6602.  00h    DWORD    pointer to next callback info structure
  6603.  04h    DWORD    pointer to notification function (see below)
  6604.  08h    DWORD    reserved
  6605.  0Ch    DWORD    address of zero-terminated list of API info structures
  6606.         (see AX=4B02h)
  6607.  
  6608. Notification function is called with:
  6609.     AX = function
  6610.         0000h switcher initialization
  6611.         Return: AX = 0000h if OK to load
  6612.                = nonzero to abort task switcher
  6613.         0001h query suspend
  6614.         BX = session ID
  6615.         Return: AX = 0000h if OK to switch session
  6616.                = 0001h if not
  6617.         0002h suspend session
  6618.         BX = session ID
  6619.         interrupts disabled
  6620.         Return: AX = 0000h if OK to switch session
  6621.                = 0001h if not
  6622.         0003h activate session
  6623.         BX = session ID
  6624.         CX = session status flags
  6625.             bit 0: set if first activation of session
  6626.             bits 1-15: reserved (0)
  6627.         interrupts disabled
  6628.         Return: AX = 0000h
  6629.         0004h session active
  6630.         BX = session ID
  6631.         CX = session status flags
  6632.             bit 0: set if first activation of session
  6633.             bits 1-15: reserved (0)
  6634.         Return: AX = 0000h
  6635.         0005h create session
  6636.         BX = session ID
  6637.         Return: AX = 0000h if OK to create session
  6638.                = 0001h if not
  6639.         0006h destroy session
  6640.         BX = session ID
  6641.         Return: AX = 0000h
  6642.         0007h switcher termination
  6643.         BX = flags
  6644.             bit 0: set if calling switcher is only switcher loaded
  6645.             bits 1-15: reserved (0)
  6646.         Return: AX = 0000h
  6647.     ES:DI -> task switcher entry point (see AX=4B02h)
  6648. Notes:    function 0000h is generally called by the program which controls or
  6649.       invokes the task switcher, rather than by the task switcher itself;
  6650.       the entry point supplied to this function is not necessarily the
  6651.       entry point to the task switcher itself, and may be 0000h:0000h.  If
  6652.       any client indicates that loading is not possible, all clients will
  6653.       be called with function 0007h; thus it is possible for a client to
  6654.       receive a termination notice without a corresponding initialization
  6655.       notice.
  6656.     except for functions 0002h and 0003h, the notification handler is
  6657.       called with interrupts enabled and may make any INT 21h function
  6658.       call; interrupts must not be enabled in functions 0002h and 0003h
  6659.     function 0007h may be called with ES:DI = 0000h:0000h if the entry
  6660.       point is no longer valid
  6661. --------T-2F4B02BX0000-----------------------
  6662. INT 2F - DOS 5+ TASK SWITCHER - INSTALLATION CHECK
  6663.     AX = 4B02h
  6664.     BX = 0000h
  6665.     ES:DI = 0000h:0000h
  6666. Return: ES:DI = 0000h:0000h if task switcher not loaded
  6667.     ES:DI -> task switcher entry point (see below) if loaded
  6668.         AX = 0000h
  6669. Notes:    the returned entry point is that for the most-recently loaded task
  6670.       switcher; the entry points for prior task switchers may be determined
  6671.       with the "get version" call (see below)
  6672.     this function is supported by PC Tools v8+ CPTASK
  6673. SeeAlso: AX=4A05h,AX=4B03h
  6674.  
  6675. Call task switcher entry point with:
  6676.     AX = 0000h get version
  6677.         Return: CF clear if successful
  6678.                 AX = 0000h
  6679.                 ES:BX -> task switcher version struct (see below)
  6680.             CF set if unsupported function
  6681.     AX = 0001h test memory region
  6682.         ES:DI -> first byte to be tested
  6683.         CX = size of region to test
  6684.         Return: CF clear if successful
  6685.                 AX = memory type of tested region
  6686.                 0000h global
  6687.                 0001h global and local
  6688.                 0002h local (replaced on session switch)
  6689.             CF set if unsupported function
  6690.     AX = 0002h suspend switcher
  6691.         ES:DI -> new task switcher's entry point
  6692.         Return: CF clear if successful
  6693.                 AX = state
  6694.                 0000h switcher has been suspended
  6695.                 0001h switcher not suspended, new switcher must
  6696.                     abort
  6697.                 0002h switcher not suspended, but new switcher
  6698.                     may run anyway
  6699.             CF set if unsupported function
  6700.     AX = 0003h resume switcher
  6701.         ES:DI -> new task switcher's entry point
  6702.         Return: CF clear if successful
  6703.                 AX = 0000h
  6704.             CF set if unsupported function
  6705.     AX = 0004h hook notification chain
  6706.         ES:DI -> callback info structure to be added to chain
  6707.             (see AX=4B01h)
  6708.         Return: CF clear if successful
  6709.                 AX = 0000h
  6710.             CF set if unsupported function
  6711.     AX = 0005h unhook notification chain
  6712.         ES:DI -> callback info structure to be removed from chain
  6713.             (see AX=4B01h)
  6714.         Return: CF clear if successful
  6715.                 AX = 0000h
  6716.             CF set if unsupported function
  6717.     AX = 0006h query API support
  6718.         BX = asynchronous API identifier
  6719.         Return: CF clear if successful
  6720.                 AX = 0000h
  6721.                 ES:BX -> API info structure (see below) for the
  6722.                     client which provides the highest
  6723.                     level of
  6724.             CF set if unsupported function
  6725.  
  6726. Format of task switcher version structure:
  6727. Offset    Size    Description
  6728.  00h    WORD    major version of supported protocol  (current protocol is 1.0)
  6729.  02h    WORD    minor version of supported protocol
  6730.  04h    WORD    major version of task switcher
  6731.  06h    WORD    minor version of task switcher
  6732.  08h    WORD    task switcher ID (see AX=4B03h)
  6733.  0Ah    WORD    operation flags
  6734.         bit 0: set if task switcher disabled
  6735.         bits 1-15: reserved (0)
  6736.  0Ch    DWORD    pointer to ASCIZ task switcher name
  6737.         ("MS-DOS Shell Task Switcher" for DOSSHELL task switcher)
  6738.  10h    DWORD    pointer to previous task switcher's entry point or 0000h:0000h
  6739.  
  6740. Format of API info structure:
  6741. Offset    Size    Description
  6742.  00h    WORD    size of structure in bytes (000Ah)
  6743.  02h    WORD    API identifier
  6744.         0001h NetBIOS
  6745.         0002h 802.2
  6746.         0003h TCP/IP
  6747.         0004h LAN Manager named pipes
  6748.         0005h Novell NetWare IPX
  6749.  04h    WORD    major version \ of highest version of API for which the support
  6750.  06h    WORD    minor version / level specified in the next field is provided
  6751.  08h    WORD    support level
  6752.         0001h minimal support
  6753.         0002h API-level support
  6754.         0003h switcher compatibility
  6755.         0004h seamless compatibility
  6756. --------T-2F4B03-----------------------------
  6757. INT 2F - DOS 5+ TASK SWITCHER - ALLOCATE SWITCHER ID
  6758.     AX = 4B03h
  6759.     ES:DI -> task switcher entry point (see AX=4B02h)
  6760. Return: AX = 0000h
  6761.     BX = switcher ID (0001h-000Fh), or 0000h if no more available
  6762. Notes:    if a task switcher has determined that it is the first to be loaded, it
  6763.       must allocate an identifier for itself and provide this function to
  6764.       all subsequent task switchers; if it is not the first to be loaded,
  6765.       it must call this function to allocate an ID.     The switcher ID is
  6766.       used as the high four bits of all session identifiers to ensure
  6767.       unique session IDs.
  6768.     if no more switcher IDs are available, the new task switcher making the
  6769.       call must terminate or disable itself
  6770.     the task switcher providing the identifiers may call the new task
  6771.       switcher's entry point as needed
  6772.     this call is available from within DOSSHELL even if the task switcher
  6773.       is not installed
  6774.     this function is supported by PC Tools v8+ CPTASK, but appears to
  6775.       always return an ID of 0000h
  6776. SeeAlso: AX=4B02h,AX=4B04h
  6777. --------T-2F4B04-----------------------------
  6778. INT 2F - DOS 5+ TASK SWITCHER - FREE SWITCHER ID
  6779.     AX = 4B04h
  6780.     BX = switcher ID
  6781.     ES:DI -> task switcher entry point (see AX=4B02h)
  6782. Return: AX = 0000h
  6783.     BX = status
  6784.         0000h successful
  6785.         other error (invalid ID or ID not allocated)
  6786. Notes:    called by a task switcher when it exits, unless it was the first loaded
  6787.       and is providing the support for AX=4B03h and AX=4B04h
  6788.     the task switcher providing the identifiers may call the terminating
  6789.       task switcher's entry point as needed
  6790.     this call is available from within DOSSHELL even if the task switcher
  6791.       is not installed
  6792.     this call is supported by PC Tools v8+ CPTASK, but appears to return
  6793.       sucessfully no matter which ID is given
  6794. SeeAlso: AX=4B02h,AX=4B03h
  6795. --------T-2F4B05-----------------------------
  6796. INT 2F C - DOS 5+ TASK SWITCHER - IDENTIFY INSTANCE DATA
  6797.     AX = 4B05h
  6798.     ES:BX = 0000h:0000h
  6799.     CX:DX -> task switcher entry point (see AX=4B02h)
  6800. Return: ES:BX -> startup info structure (see below) or 0000h:0000h
  6801. Notes:    called by task switcher
  6802.     clients with instance data should hook this call, pass it through to
  6803.       the previous handler with unchanged registers using a simulated
  6804.       interrupt.  On return, the client should create a startup info
  6805.       structure (see below), store the returned ES:BX in the "next"
  6806.       field, and return the address of the created structure in ES:BX
  6807.     all MS-DOS function calls are available from within this call
  6808. SeeAlso: AX=1605h,AX=160Bh,AX=4B02h
  6809.  
  6810. Format of startup info structure:
  6811. Offset    Size    Description
  6812.  00h  2 BYTEs    major, minor version of info structure (03h,00h)
  6813.  02h    DWORD    pointer to next startup info structure or 0000h:0000h
  6814.  06h    DWORD    0000h:0000h (ignored)
  6815.  0Ah    DWORD    ignored
  6816.  0Eh    DWORD    pointer to instance data records
  6817.  
  6818. Format of one instance data record in array:
  6819. Offset    Size    Description
  6820.  00h    DWORD    address of instance data (end of array if 0000h:0000h)
  6821.  04h    WORD    size of instance data
  6822. --------W-2F4B20-----------------------------
  6823. INT 2F - MS Windows 3 - WIN.COM - SET PROGRAM TO EXECUTE ON EXIT
  6824.     AX = 4B20h
  6825. Return: AX = 0000h if successful
  6826.         DX:CX -> 256-byte buffer for pathname and commandline (see below)
  6827. Note:    when the Windows function ExitWindows is called with an exit code of
  6828.       44h, WIN.COM executes the program specified in the returned buffer
  6829.       and then restarts Windows
  6830.  
  6831. Format of buffer:
  6832. Offset    Size    Description
  6833.  00h 128 BYTEs    ASCIZ pathname of program to execute
  6834.  80h 128 BYTEs    commandline for program
  6835. ----------2F4C-------------------------------
  6836. INT 2F U - Advanced Power Management
  6837.     AH = 4Ch
  6838.     AL = function
  6839.         00h version check
  6840.         01h suspend system requested
  6841.         FFh suspend/resume battery notification
  6842.     ???
  6843. Return: ???
  6844. ----------2F4D-------------------------------
  6845. INT 2F U - ???
  6846.     AH = 4Dh
  6847.     ???
  6848. Return: ???
  6849. Note:    reportedly called by Kana Kanji Converter and MSKK
  6850. --------N-2F4E53BL00-------------------------
  6851. INT 2F - SilverNET v2+ - INSTALLATION CHECK
  6852.     AX = 4E53h ("NS")
  6853.     BL = 00h (function "installation check")
  6854.     BH = module ID (see below)
  6855. Return: AX = 0000h if specified module installed
  6856.     BX = 4E53h if installed
  6857. Program: SilverNET is an SMB-compatible peer-to-peer NOS for DOS or
  6858.       Windows systems, by Net-Source, Inc. of Santa Clara, CA.
  6859. SeeAlso: AX=4E53h/BL=01h,AX=4E53h/BL=02h,AX=B800h,AX=B809h
  6860.  
  6861. Values for module ID:
  6862.  01h    SilverCACHE
  6863.  02h    Workstation
  6864.  03h    NetBIOS
  6865.  04h    Peer
  6866.  20h    NS Share
  6867.  80h    Netware help TSR
  6868. --------N-2F4E53BL01-------------------------
  6869. INT 2F - SilverNET - GET RUNTIME PARAMETER
  6870.     AX = 4E53h ("NS")
  6871.     BL = 01h (function "get runtime parameter")
  6872.     BH = module ID (see AX=4E53h/BL=00h)
  6873.     CX = parameter index (see below)
  6874. Return: AX = WORD value at specified index
  6875. Desc:    retrieve a word of data from the specified SilverNET module
  6876.  
  6877. Values for Peer parameter index (* = read-only):
  6878.  00h *    maximum outstanding SMB buffers
  6879.  02h *    maximum logged-in nodes
  6880.  04h *    number of shareable resources
  6881.  06h *    number of characters to print per time slice
  6882.  08h *    number of printers that can be shared
  6883.  0Ah *    number of nodes logged in
  6884.  0Ch *    number of files to allow opened
  6885.  0Eh    how fast to despool (/PSLICE)
  6886.  10h    audit flag
  6887.  24h *    far pointer to resource table (each resource is 96 bytes in length)
  6888.  32h *    far pointer to SFT (internal if SilverNET files > CONFIG.SYS files,
  6889.     else DOS SFT)
  6890.  36h    spool flag
  6891.     bit 0: LPT1 needs despooling
  6892.     bit 1: LPT2 needs despooling
  6893.     bit 2: LPT2 needs despooling
  6894.     bit 4: COM1 needs despooling
  6895.     bit 5: COM2 needs despooling
  6896.     bit 6: COM3 needs despooling
  6897.  
  6898. Values for NS Share parameter index (* = read-only):
  6899.  00h    version number (high byte = minor, low byte = major)
  6900.  10h *    segment of first lock record (other records in consecutive paragraphs)
  6901.     (if PSP field = 0000h, lock record is free)
  6902.  12h *    maximum possible number of lock records
  6903.  14h *    starting segment of sharing buffer
  6904.     (NS Share's sharing records are identical to DOS SHARE except that
  6905.     fields which are normally offsets into SHARE are segment numbers)
  6906.  18h *    size of sharing buffer in paragraphs
  6907.  1Ah *    total free paragraphs in sharing buffer
  6908.  1Ch *    current number of shared files
  6909.  1Eh *    current number of locked records
  6910.  
  6911. Values for Workstation parameter index (* = read-only):
  6912.  00h    version number (high byte = minor, low byte = major)
  6913.  02h *    size of each network buffer for file operations
  6914.  04h *    number of redirector file buffers
  6915.  06h *    size of each print cache buffer
  6916.  08h *    number of network LPT printers
  6917.  0Ch    flush time in ticks (idle time on network printer before flushing)
  6918.  0Eh    (16 WORDs) last active time for each printer
  6919.  2Eh *    stub segment if program split into two parts
  6920.  60h    receive name number for datagram listens
  6921.  62h *    18-byte machine name
  6922.  74h *    LASTDRIVE (01h = A:, etc.)
  6923.  7Ch    row number of message box on screen
  6924.  7Eh    message time in clock ticks
  6925.  82h *    number of network adapters in use
  6926.  84h    station ID broadcast flag (never set on redirectors)
  6927.  96h *    NetBIOS names left
  6928.  98h *    NCBs left
  6929.  9Ah *    sessions left
  6930.  A2h *    total number of network printers (LPT+COM)
  6931.  A4h *    number of serial network printers
  6932.  A8h *    segment containing file cache buffers
  6933.  AAh *    segment containing print cache buffers
  6934.  ACh *    bytes remaining free in HMA before program loaded
  6935.  AEh *    start of free memory in HMA
  6936.  B2h *    flag: using HMA
  6937. --------N-2F4E53BL02-------------------------
  6938. INT 2F - SilverNET - SET RUNTIME PARAMETERS
  6939.     AX = 4E53h ("NS")
  6940.     BL = 02h (function "set runtime parameters")
  6941.     BH = module ID (see AX=4E53h/BL=00h)
  6942.     CX = parameter index (see AX=4E53h/BL=01h)
  6943.     DX = new value for specified parameter
  6944. Desc:    set a WORD value in the specified SilverNET module
  6945. Note:    not all indexed parameters are writable; modifying a read-only
  6946.       parameter can result in system crashes
  6947. SeeAlso: AX=4E53h/BL=00h,AX=4E53h/BL=01h
  6948. ----------2F53-------------------------------
  6949. INT 2F U - POWER.EXE - APM event broadcasting???
  6950.     AH = 53h
  6951.     AL = event???
  6952.         05h CPU idle
  6953.         0Bh PM event broadcast API
  6954. Return: ???
  6955. Note:    called by MS Windows 3.1 POWER.DRV; hooked by MS Mouse driver v8.20+
  6956.       and PC-Cache v8.0
  6957. SeeAlso: AX=530Bh,AH=54h,INT 33/AX=002Fh
  6958. ----------2F530B-----------------------------
  6959. INT 2F U - ??? (MOUSEPWR.COM, others) - ???
  6960.     AX = 530Bh
  6961.     BX = subfunction
  6962.         0003h ???
  6963.         0004h ???
  6964.     ???
  6965. Return: ???
  6966. Note:    it appears that subfunction 0003h reads or restores the current mouse
  6967.       settings (the MS Mouse driver hooks AX=530Bh), and 0004h might be
  6968.       the converse
  6969. ----------2F5400-----------------------------
  6970. INT 2F U - POWER.EXE - INSTALLATION CHECK
  6971.     AX = 5400h
  6972. Return: AX = POWER.EXE version (AH = major, AL = minor) if installed
  6973.     BX = 504Dh ("PM")
  6974.     CF clear
  6975. Note:    called by MS Windows 3.1 POWER.DRV
  6976. SeeAlso: AH=53h,AX=5401h,AX=5402h,AX=5481h,AX=5482h
  6977. ----------2F5401-----------------------------
  6978. INT 2F U - POWER.EXE - GET/SET POWER STATUS
  6979.     AX = 5401h
  6980.     BX = function
  6981.         0000h get status
  6982.         Return: BL = power management status
  6983.                 bit 0: CPU idle
  6984.                 bit 1: ???
  6985.         ???
  6986. Return: AX = function status
  6987.         0000h success
  6988.         else  error code
  6989. Note:    called by MS Windows 3.1 POWER.DRV
  6990. SeeAlso: AH=53h,AX=5400h,AX=5402h,AX=5403h
  6991. ----------2F5402-----------------------------
  6992. INT 2F U - POWER.EXE - GET/SET IDLE DETECTION STRATEGY
  6993.     AX = 5402h
  6994.     BH = subfunction
  6995.         00h get
  6996.         other set
  6997.         BL = detection strategy (00h-0Fh or FFh)
  6998. Return: BX = current/new detection strategy
  6999. SeeAlso: AH=53h,AX=5400h,AX=5401h,AX=5481h,AX=5482h
  7000. ----------2F5403-----------------------------
  7001. INT 2F U - POWER.EXE - GET/SET ADVANCED POWER MANAGEMENT SETTING
  7002.     AX = 5403h
  7003.     BX = new power management setting or 0000h to get current setting
  7004. Return: AX = status
  7005.         0000h successful
  7006.         BX = power management setting (see below)
  7007.         other error code
  7008. SeeAlso: AX=5401h,AX=5480h
  7009.  
  7010. Values for power management setting:
  7011.  0001h-0005h "min"
  7012.  0006h         "reg"
  7013.  0007h-0008h "max"
  7014. --------t-2F5453-----------------------------
  7015. INT 2F - TesSeRact RAM-RESIDENT PROGRAM INTERFACE
  7016.     AX = 5453h
  7017.     BX = subfunction
  7018.         00h installation check
  7019.         CX = 0000h
  7020.         DS:SI -> 8-char blank-padded name
  7021.         Return: AX = FFFFh installed
  7022.                 CX = ID number of already-installed copy
  7023.                = anything else, not installed
  7024.                 CX = ID number for TSR when installed
  7025.         01h get user parameters
  7026.         CX = TSR ID number
  7027.         Return: AX = 0000h successful
  7028.                ES:BX -> user parameter block (see below)
  7029.                = nonzero failed
  7030.         02h check if hotkey in use
  7031.         CL = scan code of hot key
  7032.         Return: AX = FFFFh hot key conflicts with another TSR
  7033.                  otherwise safe to use the hotkey
  7034.         03h replace default critical error handler
  7035.         CX = TSR ID number
  7036.         DS:SI -> new routine for INT 24h
  7037.         Return: AX = nonzero, unable to install new handler
  7038.         04h get internal data area
  7039.         CX = TSR ID number
  7040.         Return: AX = 0000h
  7041.                 ES:BX -> TSR's internal data area (see below)
  7042.                = nonzero, TSR not found
  7043.         05h set multiple hot keys
  7044.         CX = TSR ID number
  7045.         DL = number of additional hot keys to allocate
  7046.         DS:SI -> table of hot keys
  7047.             BYTE  hotkey scan code
  7048.             BYTE  hotkey shift state
  7049.             BYTE  flag value to pass to TSR (nonzero)
  7050.         Return: AX = nonzero, unable to install hot keys
  7051.         06h - 0Fh reserved
  7052.         10h enable TSR
  7053.         CX = TSR ID number
  7054.         Return: AX = nonzero, unable to enable
  7055.         11h disable TSR
  7056.         CX = TSR ID number
  7057.         Return: AX = nonzero, unable to disable
  7058.         12h unload TSR
  7059.         CX = TSR ID number
  7060.         Return: AX = nonzero, invalid TSR number
  7061.         Note: if any interrupts used by TSR have been grabbed by
  7062.             another TSR, the TesSeRact routines will wait until
  7063.             it is safe to remove the indicated TSR from memory
  7064.         13h restart TSR
  7065.         CX = TSR ID number of TSR which was unloaded but is still in
  7066.              memory
  7067.         Return: AX = nonzero, unable to restart TSR
  7068.         14h get status word
  7069.         CX = TSR ID number
  7070.         Return: AX = FFFFh invalid ID number
  7071.                = other, successful
  7072.                 BX = bit flags
  7073.         15h set status word
  7074.         CX = TSR ID number
  7075.         DX = new bit flags
  7076.         Return: AX = nonzero, unable to set status word
  7077.         16h get INDOS state at popup
  7078.         CX = TSR ID number
  7079.         Return: AX = 0000h successful
  7080.                 BX = value of INDOS flag
  7081.         17h - 1Fh reserved
  7082.         20h call user procedure
  7083.         CX = TSR ID number
  7084.         ES:DI -> user-defined data
  7085.         Return: AX = 0000h successful
  7086.         21h stuff keystrokes into keyboard buffer
  7087.         CX = TSR ID number
  7088.         DL = speed
  7089.             00h stuff keystrokes only when buffer is empty
  7090.             01h stuff up to four keystrokes per clock tick
  7091.             02h stuff up to 15 keystrokes per clock tick
  7092.         DH = scan code flag
  7093.             if zero, buffer contains alternating ASCII and scan codes
  7094.             if nonzero, buffer contains only ASCII codes
  7095.         SI = number of keystrokes
  7096.         ES:DI -> buffer to stuff
  7097.         Return: AX = 0000h success
  7098.                  F0F0h user aborted with ^C or ^Break
  7099.                  other unable to stuff keystrokes
  7100.         22h (v1.10) trigger popup
  7101.         CX = TSR ID number
  7102.         Return: AX = 0000h success, TSR will either pop up or beep to
  7103.                    indicate that it is unable to pop up
  7104.                  nonzero invalid ID number
  7105.         23h (v1.10) invoke TSR's background function
  7106.         CX = TSR ID number
  7107.         Return: AX = 0000h success
  7108.                  FFFFh not safe to call background function
  7109.                  nonzero invalid ID number
  7110.         24h - 2Fh reserved
  7111. Notes:    Borland's THELP.COM popup help system for Turbo Pascal and Turbo C
  7112.       (versions 1.x and 2.x only) fully supports the TesSeRact API, as
  7113.       do the SWAP?? programs by Innovative Data Concepts.
  7114.     AVATAR.SYS supports functions 00h and 01h (only the first three fields
  7115.       of the user parameter block) using the name "AVATAR  "
  7116. SeeAlso: AX=CAFEh,INT 16/AX=55FFh,INT 2D"AMIS"
  7117. Index:    installation check;TesSeRact TSR interface|uninstall;TesSeRact
  7118.  
  7119. Values for TesSeract names:
  7120.  "AVATAR  "    AVATAR.SYS
  7121.  "SCRNBLNK"    Trusted Access screen blanker
  7122.  
  7123. Format of User Parameter Block:
  7124. Offset    Size    Description
  7125.  00h  8 BYTEs    blank-padded TSR name
  7126.  08h    WORD    TSR ID number
  7127.  0Ah    DWORD    bitmap of supported functions
  7128.  0Eh    BYTE    scan code of primary hotkey
  7129.             00h = pop up when shift states match
  7130.             FFh = no popup (if shift state also FFh)
  7131.  0Fh    BYTE    shift state of primary hotkey
  7132.             FFh = no popup (if scan code also FFh)
  7133.  10h    BYTE    number of secondary hotkeys
  7134.  11h    DWORD    pointer to extra hotkeys set by func 05h
  7135.  15h    WORD    current TSR status flags
  7136.  17h    WORD    PSP segment of TSR
  7137.  19h    DWORD    DTA for TSR
  7138.  1Dh    WORD    default DS for TSR
  7139.  1Fh    DWORD    stack at popup
  7140.  23h    DWORD    stack at background invocation
  7141. Index:    hotkeys;TesSeRact TSR interface
  7142.  
  7143. Format of TSR internal data area:
  7144. Offset    Size    Description
  7145.  00h    BYTE    revision level of TesSeRact library
  7146.  01h    BYTE    type of popup in effect
  7147.  02h    BYTE    INT 08 occurred since last invocation
  7148.  03h    BYTE    INT 13 occurred since last invocation
  7149.  04h    BYTE    active interrupts
  7150.  05h    BYTE    active soft interrupts
  7151.  06h    BYTE    DOS major version
  7152.  07h    BYTE    how long to wait before popping up
  7153.  08h    DWORD    pointer to INDOS flag
  7154.  0CH    DWORD    pointer to DOS critical error flag
  7155.  10h    WORD    PSP segment of interrupted program
  7156.  12h    WORD    PSP segment of prog interrupted by INT 28
  7157.  14h    DWORD    DTA of interrupted program
  7158.  18h    DWORD    DTA of program interrupted by INT 28
  7159.  1Ch    WORD    SS of interrupted program
  7160.  1Eh    WORD    SP of interrupted program
  7161.  20h    WORD    SS of program interrupted by INT 28
  7162.  22h    WORD    SP of program interrupted by INT 28
  7163.  24h    DWORD    INT 24 of interrupted program
  7164.  28h  3 WORDs    DOS 3+ extended error info
  7165.  2Eh    BYTE    old BREAK setting
  7166.  2Fh    BYTE    old VERIFY setting
  7167.  30h    BYTE    were running MS WORD 4.0 before popup
  7168.  31h    BYTE    MS WORD 4.0 special popup flag
  7169.  32h    BYTE    enhanced keyboard call in use
  7170.  33h    BYTE    delay for MS WORD 4.0
  7171. 11 times (for INTs 08h,09h,13h,16h,1Ch,21h,28h,2Fh,1Bh,23h, and 24h):
  7172.     DWORD    old interrupt vector
  7173.     BYTE    interrupt number
  7174.     WORD    offset in TesSeRact code segment of new interrupt handler
  7175. ----------2F5480-----------------------------
  7176. INT 2F U - POWER.EXE - GET/SET ???
  7177.     AX = 5480h
  7178.     BX = direction
  7179.         0000h get
  7180.         other set
  7181.     CX = size of buffer (at least 0010h)
  7182.     DS:SI -> buffer
  7183. Return: AX = status
  7184.         0000h successful
  7185.         other error code
  7186. SeeAlso: AX=5400h,AX=5481h,AX=548Fh
  7187. ----------2F5481-----------------------------
  7188. INT 2F U - POWER.EXE - GET STATISTICS
  7189.     AX = 5481h
  7190.     BX = ??? (0000h or 0001h)
  7191.     CX = length of buffer
  7192.     DS:SI -> buffer for statistics (see below)
  7193. Return: AX = status
  7194.         0000h successful
  7195.         else  error code
  7196. SeeAlso: AH=53h,AX=5400h,AX=5480h,AX=5402h,AX=5482h
  7197.  
  7198. Format of statistics:
  7199. Offset    Size    Description
  7200.  00h    DWORD    total ???
  7201.  04h    DWORD    ??? during which CPU was idle (divide by previous to get idle
  7202.             rate)
  7203. ----------2F5482-----------------------------
  7204. INT 2F U - POWER.EXE - GET/SET APM POLLING FREQUENCY
  7205.     AX = 5482h
  7206.     BX = new polling frequency or 0000h to get current frequency
  7207. Return: AX = 0000h (successful)
  7208.     BX = current frequency if BX=0000h on entry
  7209. SeeAlso: AH=53h,AX=5400h,AX=5401h,AX=5480h,AX=5481h,AX=548Fh
  7210. ----------2F548F-----------------------------
  7211. INT 2F U - POWER.EXE - GET/SET ???
  7212.     AX = 548Fh
  7213.     BX = ??? or 0000h to get current ???
  7214. Return: AX = 0000h (successful)
  7215.     BX = current ???
  7216.     CX = ???
  7217. SeeAlso: AX=5400h,AX=5480h,AX=5482h
  7218. --------l-2F5500-----------------------------
  7219. INT 2F U - DOS 5+ - COMMAND.COM INTERFACE
  7220.     AX = 5500h
  7221. Return: AX = 0000h if an instance of COMMAND.COM is already running
  7222.     DS:SI -> entry point table
  7223. Notes:    used to access the shareable portion of COMMAND.COM, which may have
  7224.       been moved into the HMA; only the primary COMMAND.COM retains this
  7225.       portion
  7226.     procedures called from a dispatcher in COMMAND's resident portion;
  7227.       most assume that the segment address of the resident portion is on
  7228.       the stack and are thus not of general use
  7229. SeeAlso: AX=5501h
  7230. --------l-2F5501-----------------------------
  7231. INT 2F U - DOS 5+ - ROM COMMAND.COM INTERFACE
  7232.     AX = 5501h
  7233. Return: ???
  7234. Note:    used to determine whether the caller is the first instance of ROM
  7235.       COMMAND.COM
  7236. SeeAlso: AX=5500h
  7237. --------R-2F5600DXFFFF-----------------------
  7238. INT 2F - INTERLNK - INSTALLATION CHECK
  7239.     AX = 5600h
  7240.     DX = FFFFh
  7241.     BL = instance number (00h = any, 01h = first loaded, etc.)
  7242. Return: AL = FFh if installed
  7243.         BL = instance number
  7244.         CX = ???
  7245.         DX = resident CS
  7246. SeeAlso: AX=5601h,AX=5602h
  7247. --------R-2F5601DXFFFF-----------------------
  7248. INT 2F - INTERLNK - CHECK IF REDIRECTED DRIVE
  7249.     AX = 5601h
  7250.     DX = FFFFh
  7251.     BH = drive number (0=A:)
  7252. Return: (as for AL=00h if redirected drive)
  7253. SeeAlso: AX=5600h
  7254. --------R-2F5602DXFFFF-----------------------
  7255. INT 2F - INTERLNK - GET ???
  7256.     AX = 5602h
  7257.     DX = FFFFh
  7258. Return: CX = ???
  7259. SeeAlso: AX=5600h
  7260. ----------2F57-------------------------------
  7261. INT 2F U - ???
  7262.     AH = 57h
  7263.     ???
  7264. Return: ???
  7265. Note:    reportedly used by Iomega Corp.
  7266. --------v-2F6282-----------------------------
  7267. INT 2F U - PC Tools v7.0+ VDEFEND, VSAFE, VWATCH, DATAMON - SET ??? ADDRESS
  7268.     AX = 6282h
  7269.     CX:DX -> ??? or 0000h:0000h
  7270.     DI = 0000h ???
  7271.          FFFFh ???
  7272.          other segment of ???
  7273. Return: BX = 0062h
  7274. Note:    if CX:DX = 0000h:0000h on entry, the ??? address is not changed
  7275.       (DATAMON only)
  7276. SeeAlso: INT 13/AH=FAh"VSAFE",INT 21/AH=FAh"VDEFEND"
  7277. --------v-2F6284BX0000-----------------------
  7278. INT 2F U - PC Tools v7.0+ DATAMON - INSTALLATION CHECK
  7279.     AX = 6284h
  7280.     BX = 0000h
  7281.     CX = 0000h
  7282. Return: AX = segment of resident code
  7283.     BX = 5555h
  7284.     CX = 5555h
  7285. --------v-2F6284BX0001-----------------------
  7286. INT 2F U - PC Tools v7.0+ DATAMON - GET ???
  7287.     AX = 6284h
  7288.     BX = 0001h
  7289.     CX = 0001h
  7290. Return: AX:BX -> ???
  7291.     CX = BX
  7292. --------v-2F6284BX0002-----------------------
  7293. INT 2F U - PC Tools v7.0+ DATAMON - GET ???
  7294.     AX = 6284h
  7295.     BX = 0002h
  7296.     CX = 0002h
  7297. Return: AX = ???
  7298.     BX = ???
  7299.     CX = AX
  7300.     DX = BX
  7301. --------v-2F6284BX0003-----------------------
  7302. INT 2F U - PC Tools v7.0+ DATAMON - SET ??? FLAGS
  7303.     AX = 6284h
  7304.     BX = 0003h
  7305.     CX = flags
  7306.         bit 12: ???
  7307.         10: ???
  7308.          5: ???
  7309.          3: ???
  7310.     DX = flags
  7311.         bit 15: ???
  7312. --------v-2F6284BX0004-----------------------
  7313. INT 2F U - PC Tools v8.0+ DATAMON - ???
  7314.     AX = 6284h
  7315.     BX = 0004h
  7316.     CX = 0004h
  7317. Return: AX = 5555h
  7318.     BX = ??? (0800h)
  7319.     CX = ??? (FCCCh)
  7320. --------V-2F6400-----------------------------
  7321. INT 2F - SCRNSAV2.COM - INSTALLATION CHECK
  7322.     AX = 6400h
  7323. Return: AL = 00h not installed
  7324.          FFh installed
  7325. Program: SCRNSAV2.COM is a screen saver for PS/2s with VGA by Alan Ballard
  7326. SeeAlso: INT 10/AX=5555h
  7327. Index:    screen saver;SCRNSAV2
  7328. ----------2F7000------------------------------
  7329. INT 2F - License Service API - INSTALLATION CHECK
  7330.     AX = 7000h
  7331.     CX = license server index (0000h to 001Fh)
  7332. Return: AL = status
  7333.         00h not installed
  7334.         FFh installed
  7335. Notes:    The License Service API is being maintained by Microsoft but is being
  7336.       supported by a large number of companies including Apple, Banyan,
  7337.       DEC, HP, Lotus, Microsoft, Novell, Software Publishers Association,
  7338.       and Wordperfect (not a complete list!)
  7339.     Each license service provider must search for the next free index
  7340.       slot to use
  7341. SeeAlso: AX=7001h,AX=7003h,AX=7004h,AX=7005h
  7342. ----------2F7001------------------------------
  7343. INT 2F - License Service API - REQUEST LICENSE
  7344.     AX = 7001h
  7345.     CX = license server index (0000h to 001Fh)
  7346.     DS:DX -> SLSREQEUST structure (see below)
  7347. Return: AX = status
  7348.         0000h success
  7349.         else  provider error code
  7350.     ES:BX = provider specific handle for the license context
  7351. SeeAlso: AX=7002h,AX=7004h,AX=7005h
  7352.  
  7353. Format of SLSREQUEST structure:
  7354. Offset    Size    Description
  7355.  00h    DWORD    (return) status code
  7356.  04h    DWORD    (return) handle identifying context
  7357.  08h    DWORD    (call) address of Publisher string
  7358.  0Ch    DWORD    (call) address of Product string
  7359.  10h    DWORD    (call) address of Version string
  7360.  14h    DWORD    units required
  7361.  18h    DWORD    address of comment string
  7362.  1Ch    DWORD    address of SLSCHALLENGE structure (see below)
  7363.  
  7364. Format of SLSCHALLENGE structure:
  7365. Offset    Size    Description
  7366.  00h    DWORD    algorithm (currently always 1)
  7367.  04h    DWORD    secret to be challenged (1-255)
  7368.  08h    DWORD    size of challenge in bytes (1-255)
  7369.  0Ch  N BYTEs    challenge data
  7370. ----------2F7002------------------------------
  7371. INT 2F - License Service API - RELEASE LICENSE
  7372.     AX = 7002h
  7373.     CX = license server index (0000h to 001Fh)
  7374.     DS:DX -> SLSRELEASE structure (see below)
  7375.     ES:BX = provider specific handle for the license context
  7376. Return: AL = status
  7377.         00h not installed
  7378.         FFh installed
  7379. SeeAlso: AX=7001h,AX=7005h
  7380.  
  7381. Format of SLSRELEASE structure:
  7382. Offset    Size    Description
  7383.  00h    DWORD    handle indentifying license context
  7384.  04h    DWORD    total units consumed
  7385.  08h    DWORD    address of comment string
  7386. ----------2F7003------------------------------
  7387. INT 2F - License Service API - UPDATE
  7388.     AX = 7003h
  7389.     CX = license server index (0000h to 001Fh)
  7390.     DS:DX -> SLSUPDATE structure
  7391.     ES:BX = provider specific handle for the license context
  7392. Return: AL = status
  7393.         00h not installed
  7394.         FFh installed
  7395. SeeAlso: AX=7004h,AX=7005h
  7396.  
  7397. Format of SLSUPDATE structure:
  7398. Offset    Size    Description
  7399.  00h    DWORD    (return) status code
  7400.  04h    DWORD    (call) handle identifying license context
  7401.  08h    DWORD    (call) total units consumed
  7402.  0Ch    DWORD    additional units required
  7403.  10h    DWORD    address of comment string
  7404.  14h    DWORD    address of SLSCHALLENGE structure (see AX=7001h)
  7405. ----------2F7004------------------------------
  7406. INT 2F - License Service API - GET ERROR
  7407.     AX = 7004h
  7408.     CX = license server index (0000h to 001Fh)
  7409.     DS:DX -> SLSGETERROR structure (see below)
  7410.     ES:BX = provider specific handle for the license context
  7411. Return: AL = status
  7412.         00h not installed
  7413.         FFh installed
  7414. SeeAlso: AX=7000h,AX=7001h
  7415.  
  7416. Format of SLSGETERROR structure:
  7417. Offset    Size    Description
  7418.  00h    DWORD    (return) status code
  7419.  04h    DWORD    handle identifying license context
  7420.  08h    DWORD    error code
  7421.  0Ch    DWORD    buffer size in bytes
  7422.  10h  N BYTEs    data buffer
  7423. ----------2F7005------------------------------
  7424. INT 2F - License Service API - QUERY LICENSE
  7425.     AX = 7005h
  7426.     CX = license server index (0000h to 001Fh)
  7427.     DS:DX -> SLSQUERY structure (see below)
  7428.     ES:BX = provider specific handle for the license context
  7429. Return: AL = status
  7430.         00h not installed
  7431.         FFh installed
  7432. SeeAlso: AX=7001h,AX=7002h
  7433.  
  7434. Format of SLSQUERY structure:
  7435. Offset    Size    Description
  7436.  00h    DWORD    (return) status code
  7437.  04h    DWORD    handle identifying license context
  7438.  08h    DWORD    information index
  7439.  0Ch    DWORD    buffer size in bytes
  7440.  10h  N BYTEs    data buffer
  7441. --------d-2F7200-----------------------------
  7442. INT 2F - SRDISK v1.30 - INSTALLATION CHECK
  7443.     AX = 7200h
  7444. Return: AL = FFh if installed
  7445.         ES = segment of device driver header (see below)
  7446. Program: SRDISK is a freeware resizeable RAMdisk by Marko Kohtala
  7447.  
  7448. Format of device driver header:
  7449. Offset    Size    Description
  7450.  00h 10 BYTEs    same as standard device driver header (see INT 21/AH=52h)
  7451.  0Ah    BYTE    number of subunits (drives) supported by driver
  7452.  0Bh  3 BYTEs    signature "SRD"
  7453.  0Eh  4 BYTEs    memory type string (currently only "XMS ")
  7454.  12h  4 BYTEs    ASCII driver version string "N.NN"
  7455.  16h    BYTE    00h
  7456.  17h    BYTE    configuration format version (currently 00h)
  7457.  18h    WORD    offset of drive configuration data
  7458. --------N-2F7A00-----------------------------
  7459. INT 2F - Novell NetWare - LOW-LEVEL API (IPX) INSTALLATION CHECK
  7460.     AX = 7A00h
  7461. Return: AL = 00h not installed
  7462.        = FFh installed
  7463.         ES:DI -> FAR entry point for routines accessed exclusively
  7464.             through INT 7A in NetWare versions through 2.0a.  Call
  7465.             with same values as INT 7A
  7466. SeeAlso: AX=7AFFh/BX=0000h,AX=D800h,INT 64"Novell",INT 7A"Novell"
  7467. --------N-2F7A10-----------------------------
  7468. INT 2F U - Novell NetWare - TBMI v1.1+ - GET TBMI STATUS
  7469.     AX = 7A10h
  7470. Return: DH = major TBMI version number
  7471.     DL = minor TBMI version number (01h for v1.1)
  7472.     CX = segment address of TBMI resident part
  7473.     BX = status word of TBMI (see below)
  7474. Note:    TBMI is the Task-Switched Buffer Manager Interface
  7475. SeeAlso: AX=7A11h,AX=7A12h,AX=7A13h,AX=7A14h
  7476.  
  7477. Bitfields for status word:
  7478.  bit 0    INT2F intercepted by TBMI
  7479.  bit 1    INT7A intercepted by TBMI
  7480.  bit 2    INT64 intercepted by TBMI
  7481.  bits 3-14 reserved or unused ???
  7482.  bit 15 outstanding task ID was detected
  7483. --------N-2F7A11-----------------------------
  7484. INT 2F U - Novell NetWare - TBMI v1.1+ - GET INT2F HANDLERS
  7485.     AX = 7A11h
  7486. Return: ES:BX -> old INT 2F handler
  7487.     DS:DX -> TBMI INT 2F handler
  7488. SeeAlso: AX=7A10h,AX=7A12h,AX=7A13h,AX=7A1Ah
  7489. --------N-2F7A12-----------------------------
  7490. INT 2F U - Novell NetWare - TBMI v1.1+ - GET INT64 HANDLERS
  7491.     AX = 7A12h
  7492. Return: ES:BX -> old INT 64 handler
  7493.     DS:DX -> TBMI INT 64 handler
  7494. SeeAlso: AX=7A10h,AX=7A11h,AX=7A13h
  7495. --------N-2F7A13-----------------------------
  7496. INT 2F U - Novell NetWare - TBMI v1.1+ - GET INT7A HANDLERS
  7497.     AX = 7A13h
  7498. Return: ES:BX -> old INT 7A handler
  7499.     DS:DX -> TBMI INT 7A handler
  7500. SeeAlso: AX=7A10h,AX=7A11h,AX=7A12h
  7501. --------N-2F7A14-----------------------------
  7502. INT 2F U - Novell NetWare - TBMI v1.1+ - GET STATISTICS
  7503.     AX = 7A14h
  7504.     CX = statistic to retrieve
  7505.         0000h available diagnostic functions???
  7506.         Return: CX = maximum available function??? (000Ch for v2.0)
  7507.         0001h buffers in use
  7508.         Return: CX = TBMI buffers currently in use
  7509.         0002h maximum buffers used
  7510.         Return: CX = maximum number of buffers ever in use
  7511.         0003h unavailable buffers
  7512.         Return: CX = count of unavailable TBMI buffers
  7513.         0004h old interrupt usage
  7514.         Return: CX = TBMI accesses to intercepted old vectors INT 2F,
  7515.                 INT 64, and INT 7A
  7516.         0005h far call usage
  7517.         Return: CX = TBMI accesses to IPX/SPX far call handler (not
  7518.                 including internal accesses)
  7519.         0006h task buffering
  7520.         Return: CX = TBMI task buffering status (enabled/disabled or
  7521.                 disable/enable switch count???)
  7522.         0007h current task ID
  7523.         Return: CX = TBMI current task ID number (0000h if ???)
  7524.         0008h outstanding ID count
  7525.         Return: CX = number of outstanding TBMI IDs
  7526.         0009h configured ECBs
  7527.         Return: CX = number of TBMI Event Control Blocks configured
  7528.         000Ah configured data ECBs
  7529.         Return: CX = number of TBMI data ECBs configured
  7530.         000Bh configured sockets
  7531.         Return: CX = number of TBMI sockets configured (from NETCFG)
  7532.         000Ch current sockets
  7533.         Return: CX = number of TBMI sockets currently in use
  7534. Return: BX = maximum supported subfunction (000Ch)
  7535. SeeAlso: AX=7A10h
  7536. --------N-2F7A15-----------------------------
  7537. INT 2F OU - Novell NetWare - TBMI v1.1 only - RESET ???
  7538.     AX = 7A15h
  7539. Return: BX = new value of ???
  7540. Desc:    set ??? to its default value
  7541. Note:    this call is a NOP under TBMI v2.0 (TBMI2)
  7542. SeeAlso: AX=7A17h
  7543. --------N-2F7A16-----------------------------
  7544. INT 2F OU - Novell NetWare - TBMI v1.1 only -
  7545.     AX = 7A16h
  7546.     CX = ???
  7547.     ???
  7548. Return: ???
  7549. Note:    this call is a NOP under TBMI v2.0 (TBMI2)
  7550. --------N-2F7A17-----------------------------
  7551. INT 2F OU - Novell NetWare - TBMI v1.1 only - ???
  7552.     AX = 7A17h
  7553.     ???
  7554. Return: BX = old value of ???
  7555.     CX = new value of ???
  7556. Note:    this call is a NOP under TBMI v2.0 (TBMI2)
  7557. SeeAlso: AX=7A15h
  7558. --------N-2F7A18-----------------------------
  7559. INT 2F U - Novell NetWare - TASKID v1.0 - INSTALLATION CHECK
  7560.     AX = 7A18h
  7561. Return: AL = FFh if installed
  7562.         BX = configuration flags (see below)
  7563.         CX = resident code segment
  7564. SeeAlso: AX=7A10h
  7565.  
  7566. Bitfields for configuration flags:
  7567.  bit 0    INT 2F hooked
  7568.  bit 3    INT 08 hooked
  7569.  other    unused
  7570. --------N-2F7A19-----------------------------
  7571. INT 2F U - Novell NetWare - TASKID v1.0 - GET INT 08 HANDLERS
  7572.     AX = 7A19h
  7573. Return: AL = FFh
  7574.     DS:DX -> TASKID INT 08 handler
  7575.     ES:BX -> original INT 08 handler
  7576. --------N-2F7A1A-----------------------------
  7577. INT 2F U - Novell NetWare - TASKID v1.0 - GET INT 2F HANDLERS
  7578.     AX = 7A1Ah
  7579. Return: AL = FFh
  7580.     DX:DX -> TASKID INT 2F handler
  7581.     ES:BX -> original INT 2F handler
  7582. SeeAlso: AX=7A11h,AX=7A19h
  7583. --------N-2F7A1B-----------------------------
  7584. INT 2F U - Novell NetWare - TASKID v1.0 - GET DIAGNOSTICS INFORMATION
  7585.     AX = 7A1Bh
  7586.     CX = desired information
  7587.         0000h supported functions
  7588.         0001h TASKID ID number
  7589.         Return: CX = ID number
  7590.         0002h set-ID count
  7591.         Return: CX = ID set count
  7592. Return: AL = FFh
  7593.     BX = highest supported subfunction number (0002h)
  7594. SeeAlso: AX=7A14h,AX=7A18h
  7595. --------N-2F7A1C-----------------------------
  7596. INT 2F U - Novell NetWare - TBMI v1.1+ - ???
  7597.     AX = 7A1Ch
  7598.     BP = ???
  7599.     CX:DX = ???
  7600. Return: AX = 70FFh
  7601. --------N-2F7A1D-----------------------------
  7602. INT 2F U - Novell NetWare - TBMI v1.1+ - ???
  7603.     AX = 7A1Dh
  7604.     ???
  7605. Return: ES = ???
  7606.     ???
  7607.     SI destroyed
  7608. --------N-2F7A1E-----------------------------
  7609. INT 2F U - Novell NetWare - TBMI v1.1+ - ???
  7610.     AX = 7A1Eh
  7611.     ES:SI -> ???
  7612.     ???
  7613. Return: ???
  7614. --------N-2F7A20BX0000-----------------------
  7615. INT 2F - Novell NetWare - Advanced NetWare 4.0 DOS Requester - GET CALL ADDRESS
  7616.     AX = 7A20h
  7617.     BX = 0000h
  7618. Return: AX = 0000h on success
  7619.         ES:BX -> far call address for DOS Requester
  7620. Note:    the DOS Requester replaces the NetWare Shell (ANETx, NETx) on
  7621.       NetWare LAN's as of the release of Advanced NetWare 4.0 (1993).  It
  7622.       is backward compatible with NetWare 2.1x through 3.11 servers as
  7623.       well.     Note that there was a NetWare 4.0 in the early 1980's, which
  7624.       can cause confusion.
  7625. --------N-2F7A40-----------------------------
  7626. INT 2F - Novell NetWare - TCP/IP Protocol Stack - INSTALLATION CHECK
  7627.     AX = 7A40h
  7628. Return: AX = 7AFFh if installed
  7629.         BX = ???
  7630.         bit 0: ???
  7631.         bit 1: ???
  7632.         bits 15-2: ???
  7633.         CX = version (CH=major, CL=minor)
  7634.         DX = 0000h
  7635.         ES:DI -> entry point for ???
  7636. SeeAlso: AX=7A41h
  7637. --------N-2F7A41-----------------------------
  7638. INT 2F - Novell NetWare - TCP/IP Protocol Stack - ???
  7639.     AX = 7A41h
  7640.     ES:DI -> ???
  7641. Return: AX = 7AFFh if supported
  7642.         BX = ???
  7643.         CX = version (CH=major, CL=minor)
  7644.         DX = 0000h
  7645.         SI = ???
  7646.         ES:DI -> entry point for ???
  7647. SeeAlso: AX=7A40h
  7648. --------N-2F7A4DBX0001-----------------------
  7649. INT 2F - Novell Netware - ???
  7650.     AX = 7A4Dh
  7651.     BX = 0001h
  7652.     ES:DI -> ???
  7653. Return: AL = FFh if ???
  7654.         ES:DI -> ???
  7655. Note:    called by NETBIOS.EXE v3.01
  7656. --------N-2F7A80-----------------------------
  7657. INT 2F C - Novell NetWare - SHELL 3.01d BROADCAST - ABNORMAL EXIT
  7658.     AX = 7A80h
  7659. Return: nothing
  7660. Notes:    called on abnormal exit of the NetWare shell to notify other Novell
  7661.       TSRs that it is unsafe to call the shell in the future.
  7662.     must be passed through so that all interested programs see the exit
  7663.     on receiving this call, IPXODI clears an internal pointer to a
  7664.       default value; Novell's NETBIOS.EXE clears its INT 21h pointer to
  7665.       0000h:0000h and stops calling it
  7666. SeeAlso: AX=7A81h
  7667. --------N-2F7A81-----------------------------
  7668. INT 2F C - Novell NetWare - SHELL 3.01d BROADCAST - SET SHELL INT 21 HANDLER
  7669.     AX = 7A81h
  7670.     CX:DX -> shell's INT 21h entry point
  7671. Return: nothing
  7672. Notes:    the shell calls this function as it loads to allow interested TSRs
  7673.       and drivers to make a local copy of the shell's entry point
  7674.     must be passed through so that all interested programs see it
  7675. --------N-2F7A85-----------------------------
  7676. INT 2F C - Novell NetWare - shell 3.01 - BROADCAST INFORM
  7677.     AX = 7A85h
  7678.     CX = broadcast server number
  7679. Return: CX = 0000h if broadcast message handled by another program
  7680.     CX unchanged if broadcast not handled
  7681. --------N-2F7A90-----------------------------
  7682. INT 2F U - Novell NetWare - NETBIOS.EXE 3+ - INSTALLATION CHECK
  7683.     AX = 7A90h
  7684. Return: AL = 00h if present
  7685.         BX = ???
  7686.         CX = PSP segment of NETBIOS resident code
  7687. SeeAlso: AX=7AFEh
  7688. --------N-2F7AC1-----------------------------
  7689. INT 2F - LAN HiJack - LHR - DISABLE???
  7690.     AX = 7AC1h
  7691. Program: LAN HiJack is a NetWare utility by KDS Software which allows a user
  7692.       to take over control of a workstation remotely; LHR is the program
  7693.       run on the slave workstation
  7694. SeeAlso: AX=7AC8h,AX=7AC9h,AX=7ACFh
  7695. --------N-2F7AC2-----------------------------
  7696. INT 2F - LAN HiJack - LHR - SYNCHRONIZE SHIFT STATES???
  7697.     AX = 7AC2h
  7698. Note:    sets BIOS keyboard status byte to an internal variable
  7699. SeeAlso: AX=7AC3h,AX=7ACFh
  7700. --------N-2F7AC3-----------------------------
  7701. INT 2F - LAN HiJack - LHR - CLEAR ??? FLAG
  7702.     AX = 7AC3h
  7703. SeeAlso: AX=7AC2h,AX=7ACFh
  7704. --------N-2F7AC8-----------------------------
  7705. INT 2F - LAN HiJack - LHR - ENABLE FUNCTIONS
  7706.     AX = 7AC8h
  7707.     BL = function(s) to enable (see below)
  7708. SeeAlso: AX=7AC1h,AX=7AC9h,AX=7ACFh
  7709.  
  7710. Bitfields for function(s) to enable/disable:
  7711.  bit 0    ???
  7712.  bit 1    remote keyboard enabled
  7713.  bit 2    support remote's mouse
  7714.  bits 3-7 unused
  7715. --------N-2F7AC9-----------------------------
  7716. INT 2F - LAN HiJack - LHR - DISABLE FUNCTIONS
  7717.     AX = 7AC9h
  7718.     BL = function(s) to disable (see AX=7AC8h)
  7719. SeeAlso: AX=7AC1h,AX=7AC8h
  7720. --------N-2F7ACA-----------------------------
  7721. INT 2F - LAN HiJack - LHJ - ???
  7722.     AX = 7ACAh
  7723.     BL = ???
  7724. Return: ???
  7725. Program: LAN HiJack is a NetWare utility by KDS Software which allows a user
  7726.       to take over control of a workstation remotely; LHJ is the program
  7727.       run on the controlling workstation
  7728. --------N-2F7ACB-----------------------------
  7729. INT 2F - LAN HiJack - LHJ - ???
  7730.     AX = 7ACBh
  7731.     BX = ???
  7732. Return: ???
  7733. Note:    this function appears to be related to the keyboard
  7734. SeeAlso: AX=7ACCh
  7735. --------N-2F7ACC-----------------------------
  7736. INT 2F - LAN HiJack - LHJ - ???
  7737.     AX = 7ACCh
  7738.     BX = ???
  7739. Return: ???
  7740. Note:    this function appears to be related to the mouse
  7741. SeeAlso: AX=7ACBh
  7742. --------N-2F7ACFBX0000-----------------------
  7743. INT 2F - LAN HiJack - LHR - INSTALLATION CHECK
  7744.     AX = 7ACFh
  7745.     BX = 0000h
  7746. Return: BX = segment of resident code if installed
  7747. Program: LAN HiJack is a NetWare utility by KDS Software which allows a user
  7748.       to take over control of a workstation remotely; LHR is the program
  7749.       run on the slave workstation
  7750. --------N-2F7AF0-----------------------------
  7751. INT 2F - Novell Netware - DOSNP.EXE v1.30G - INSTALLATION CHECK
  7752.     AX = 7AF0h
  7753. Return: AL = FFh if present
  7754.         ES = 7AF0h
  7755.         CX = PSP segment of resident code
  7756. --------N-2F7AF1-----------------------------
  7757. INT 2F - Novell Netware - Access Server Driver - INSTALLATION CHECK
  7758.     AX = 7AF1h
  7759.     BL = sequence number (01h first driver, 02h second, 00h no driver)
  7760. Return: AX <> 7AF1h if present
  7761.         BH = total number of drivers
  7762.         ---if BL nonzero on entry---
  7763.         AL = number of ports provided by specified driver
  7764.         ES:DI -> driver entry point (see below)
  7765.         ES:DX -> ID string
  7766.  
  7767. Call driver entry point with:
  7768.    AH    function
  7769.    01h initialize port
  7770.     AL = port number (00h-0Fh)
  7771.     ES:BX -> configuration parameter block (see below)
  7772.     interrupts disabled
  7773.     Return: CF clear if successful
  7774.         CF set on error
  7775.    02h get port status
  7776.     AL = port number (00h-0Fh)
  7777.     interrupts disabled
  7778.     Return: CF clear if successful
  7779.             BL = transmitter status (see below)
  7780.             BH = receiver status (see below)
  7781.             DL = external status signals (see below)
  7782.         CF set on error
  7783.         interrupts disabled
  7784.    03h get input from port
  7785.     AL = port number (00h-0Fh)
  7786.     CX = size of data buffer
  7787.     ES:BX -> buffer for data
  7788.     interrupts disabled
  7789.     Return: CF clear if successful
  7790.         CF set on error
  7791.         interrupts disabled
  7792.         CX = number of bytes read
  7793.     Note:    the driver will add a NUL to the buffer when a break
  7794.           signal is detected
  7795.    04h send output data to port
  7796.     AL = port number (00h-0Fh)
  7797.     CX = number of bytes to send
  7798.     ES:BX -> buffer containing data
  7799.     interrupts disabled
  7800.     Return: CF clear if successful
  7801.         CF set on error
  7802.         interruptsa disabled
  7803.         CX = number of bytes actually written
  7804.    05h get I/O character counts
  7805.     AL = port number (00h-0Fh)
  7806.     interrupts disabled
  7807.     Return: CF clear if successful
  7808.             BX = number of bytes pending transmission
  7809.             CX = number of bytes available for reading
  7810.         CF set on error
  7811.         interrupts disabled
  7812.    06h control XON/XOFF
  7813.     AL = port number (00h-0Fh)
  7814.     DL = new state
  7815.         (00h software flow control disabled, else enabled)
  7816.     interrupts disabled
  7817.     Return: CF clear if successful
  7818.         CF set on error
  7819.         interrupts disabled
  7820.    07h get error counts and statistics
  7821.     AL = port number (00h-0Fh)
  7822.     ES:BX -> buffer for statistics (see below)
  7823.     interrupts disabled
  7824.     Return: CF clear if successful
  7825.             ES:BX buffer filled
  7826.         CF set on error
  7827.         interrupts disabled
  7828.    08h general request
  7829.     AL = port number (00h-0Fh)
  7830.     DX = requested operations
  7831.         bit 0: flush transmit buffers
  7832.         bit 1: flush receive buffers
  7833.         bit 4: define XON/XOFF characters
  7834.     ES:BX -> XON/XOFF characters (see below) if DX bit 4 set
  7835.     interrupts disabled
  7836.     Return: CF clear if successful
  7837.         CF set on error
  7838.         interrupts disabled
  7839.    09h deadman timer management
  7840.     AL = port number (00h-0Fh)
  7841.     BX = next time interval in seconds (0000h to disable timer)
  7842.     interrupts disabled
  7843.     Return: CF clear
  7844.         interrupts disabled
  7845.    0Ah get buffer sizes
  7846.     AL = port number (00h-0Fh)
  7847.     interrupts disabled
  7848.     Return: CF clear if successful
  7849.            BX = size of transmit buffer
  7850.            CX = size of receive buffer
  7851.         CF set on error
  7852.         interrupts disabled
  7853.  
  7854. Values for transmitter status:
  7855.  00h    uninitialized
  7856.  01h    ready, not transmitting
  7857.  02h    transmitting
  7858.  03h    XOFF received
  7859.  04h    transmitting, buffer full
  7860.  05h    XOFF received and buffer full
  7861.  
  7862. Values for receiver status:
  7863.  00h    uninitialized
  7864.  01h    ready
  7865.  02h    receive buffer full, data may have been lost
  7866.  
  7867. Bitfields for external status signals:
  7868.  bits 7,6 undefined
  7869.  bit 5    CTS active
  7870.  bit 4    DSR active
  7871.  bit 3    DCD active
  7872.  bits 2,1 undefined
  7873.  bit 0    ring indicator
  7874.  
  7875. Format of configuration parameter block:
  7876. Offset    Size    Description
  7877.  00h    BYTE    receive baud rate index
  7878.         00h 50 bps, 01h 75 bps, 02h 110 bps, 03h 134.5 bps,
  7879.         04h 150 bps, 05h 300 bps, 06h 600 bps, 07h 1200 bps,
  7880.         08h 1800 bps, 09h 2000 bps, 0Ah 2400 bps, 0Bh 3600 bps,
  7881.         0Ch 4800 bps, 0Dh 7200 bps, 0Eh 9600 bps, 0Fh 19200 bps,
  7882.         10h 38400 bps, 11h 57600 bps, 12h 115200 bps
  7883.  01h    BYTE    receive bits per character (0=5 bits..3=8 bits)
  7884.  02h    BYTE    receive stop bits
  7885.  03h    BYTE    receive parity
  7886.         00h none, 01h odd, 02h even, 03h mark, 04h space
  7887.  04h    BYTE    transmit baud rate index (same as receive baud rate)
  7888.  05h    BYTE    transmit bits per character (0=5 bits..3=8 bits)
  7889.  06h    BYTE    transmit stop bits
  7890.  07h    BYTE    transmit parity (same as receive parity)
  7891.  08h    BYTE    DTR state (00h off, 01h on)
  7892.  09h    BYTE    RTS state (00h off, 01h on)
  7893.  0Ah    BYTE    flow control
  7894.         00h none, 01h XON/XOFF, 02h RTS/CTS, 03h both
  7895.  0Bh    BYTE    break control (00h off, 01h on)
  7896.  
  7897. Format of statistics:
  7898. Offset    Size    Description
  7899.  00h    BYTE    port number
  7900.  01h    BYTE    external status signals (see above)
  7901.  02h    BYTE    transmitter status (see above)
  7902.  03h    BYTE    receiver status (see above)
  7903.  04h    DWORD    number of characters received
  7904.  08h    DWORD    number of characters transmitted
  7905.  0Ch    WORD    input parity errors
  7906.  0Eh    WORD    input framing errors
  7907.  10h    WORD    lost characters due to hardware overrun
  7908.  12h    WORD    lost characters due to data buffer overrun
  7909. Note:    the counts are not allowed to wrap around; once a count reaches FFFFh
  7910.       or FFFFFFFFh, it is no longer incremented
  7911.  
  7912. Format of XON/XOFF characters:
  7913. Offset    Size    Description
  7914.  00h    BYTE    04h (number of bytes following)
  7915.  01h    BYTE    transmit XON character
  7916.  02h    BYTE    transmit XOFF character
  7917.  03h    BYTE    receive XON character
  7918.  04h    BYTE    receive XOFF character
  7919. --------N-2F7AFE-----------------------------
  7920. INT 2F - Novell NetWare - DOSNP.EXE - INSTALLATION CHECK
  7921.     AX = 7AFEh
  7922. Return: AL = FFh if present
  7923.         ES = (data???) segment of DOSNP
  7924. Program: DOSNP.EXE provides "named pipes" support for DOS workstations running
  7925.        NetWare
  7926. Note:    the NetWare shell calls this function and refuses to load if DOSNP is
  7927.       present
  7928. SeeAlso: AX=7A90h
  7929. --------N-2F7AFFBX0000-----------------------
  7930. INT 2F - Novell NetWare - TBMI v1.1+ - INSTALLATION CHECK???
  7931.     AX = 7AFFh
  7932.     BX = 0000h
  7933.     CX = 4E65h ("Ne")
  7934.     DX = 7457h ("tW")
  7935.     ES:DI -> IPX/SPX special handler (XMS/EMS ???)
  7936. Return: AL = FFh if installed
  7937.         CX = configured sockets (14h)
  7938.         DS:SI -> data table ???
  7939.         ES:DI -> IPX far call handler
  7940. Notes:    for IPX/SPX this call reportedly returns DS:DI pointing to the table
  7941.       of pointers to service events queue head and tail
  7942.     this function is also supported by IPXODI
  7943. SeeAlso: AX=7AFFh/BX=0001h
  7944. --------N-2F7AFFBX0001-----------------------
  7945. INT 2F - Novell NetWare - TBMI v1.1+, shell v3.01d - INSTALLATION CHECK???
  7946.     AX = 7AFFh
  7947.     BX = 0001h
  7948.     CX = 4E65h ("Ne")
  7949.     DX = 7457h ("tW")
  7950. Return: AL = FFh if installed
  7951.         CX = ???  (8000h)
  7952.         SI = ??? (or -> ???) (0002h)
  7953.         ES:DI -> IPX far call handler
  7954.         ES:DX -> 6-byte data area ???
  7955. Note:    this function is also supported by IPXODI
  7956. SeeAlso: AX=7AFFh/BX=0000h
  7957. --------d-2F7F00-----------------------------
  7958. INT 2F - Jim Harper's CD-ROM redirector SCSI driver - INSTALLATION CHECK
  7959.     AX = 7F00h
  7960. Return: AL = FFh if installed
  7961. SeeAlso: AX=7F01h,AX=7F02h,AX=7F03h
  7962. --------d-2F7F01-----------------------------
  7963. INT 2F - Jim Harper's CD-ROM redirector SCSI driver - DO COMMAND
  7964.     AX = 7F01h
  7965.     DS:DX -> command record (see below)
  7966. Return: AL = status
  7967.         00h successful
  7968.         else error code
  7969. SeeAlso: AX=7F00h,AX=7F02h,INT 11/AH=FFh"SDLP",INT 21/AX=4402h"ASPI"
  7970. SeeAlso: INT 4F/AX=8100h
  7971.  
  7972. Format of command record:
  7973. Offset    Size    Description
  7974.  00h    BYTE    ID
  7975.  01h 10 BYTEs    CDB (Command Descriptor Block) for operation
  7976.  0Bh    WORD    segment of buffer
  7977.  0Dh    WORD    offset of buffer
  7978.  0Fh    BYTE    status
  7979.  10h    BYTE    sense
  7980.  12h    WORD    count
  7981. --------d-2F7F02-----------------------------
  7982. INT 2F - Jim Harper's CD-ROM redirector SCSI driver - DO RESET
  7983.     AX = 7F02h
  7984. SeeAlso: AX=7F00h,AX=7F01h
  7985. --------d-2F7F03-----------------------------
  7986. INT 2F - Jim Harper's CD-ROM redirector SCSI driver - UNINSTALL
  7987.     AX = 7F03h
  7988. Return: AL = status
  7989.         00h successful
  7990.         01h unable to uninstall
  7991. SeeAlso: AX=7F00h
  7992. ----------2F7F24-----------------------------
  7993. INT 2F - Multiplex - ???
  7994.     AX = 7F24h
  7995.     ???
  7996. Return: ???
  7997. Note:    called by PC/370, an IBM 370 emulator by Donald S. Higgins
  7998. ----------2F7F26-----------------------------
  7999. INT 2F - Multiplex - ???
  8000.     AX = 7F26h
  8001.     ???
  8002. Return: ???
  8003. Note:    called by PC/370, an IBM 370 emulator by Donald S. Higgins
  8004. --------!------------------------------------
  8005.